IdlingResource Espresso with RxJava

android, android-espresso, rx-java

Solution

Wrote a little integration piece between RxJava Plugins and Espresso. Hope this helps someone else.

https://gist.github.com/digitalbuddha/d886eae1578bca78b9bf

Edit:

There is a much easier way to accomplish this task. Add the following rule to your tests

public class AsyncTaskSchedulerRule implements TestRule {
    final Scheduler asyncTaskScheduler = Schedulers.from(AsyncTask.THREAD_POOL_EXECUTOR);

    @Override
    public Statement apply(Statement base, Description description) {
        return new Statement() {
            @Override
            public void evaluate() throws Throwable {
                RxJavaHooks.setOnIOScheduler(scheduler -> asyncTaskScheduler);
                RxJavaHooks.setOnComputationScheduler(scheduler -> asyncTaskScheduler);
                RxJavaHooks.setOnNewThreadScheduler(scheduler -> asyncTaskScheduler);
                try {
                    base.evaluate();
                } finally {
                    RxJavaHooks.reset();
                }
            }
        };
    }
}

Problem

I recently converted my application from using async tasks to rxjava. Now, my espresso tests no longer wait for my data calls to complete due to espresso not having an idling resources for rxjava. I noticed that you can make custom idling resources but I can't figure out how to make it work with rxJava Schedulers, Scheduler.io specifically. Any help/best practice would be greatly appreciated.

Original source