Idling Resources

Espresso needs to know when your app is idle. Register IdlingResources for async operations.

CountingIdlingResource

java
// In your production code (e.g. Repository or ViewModel)
public class MyRepository {
    public static final CountingIdlingResource idlingResource =
        new CountingIdlingResource("NetworkCalls");

    public void fetchData() {
        idlingResource.increment();
        apiService.getData().enqueue(new Callback<>() {
            @Override
            public void onResponse(Call<Data> call, Response<Data> response) {
                idlingResource.decrement();
                // handle response
            }
            @Override
            public void onFailure(Call<Data> call, Throwable t) {
                idlingResource.decrement();
            }
        });
    }
}

Register in test

java
@Before
public void registerIdlingResource() {
    IdlingRegistry.getInstance().register(MyRepository.idlingResource);
}

@After
public void unregisterIdlingResource() {
    IdlingRegistry.getInstance().unregister(MyRepository.idlingResource);
}

// Now Espresso waits automatically for network calls to complete