Did you complete the Espresso Idling Resource quiz? Here comes the solution!
DialogFragmentIdlingResource
In the quiz, the test fails because we were verifying the text before the loading dialog dismisses. To make it pass, we can add an idling resource that is only idle when the dialog is not shown.
public DialogFragmentIdlingResource( FragmentManager manager, String tag) { this.manager = manager; this.tag = tag; } @Override public boolean isIdleNow() { boolean idle = (manager.findFragmentByTag(tag) == null); if (idle) { resourceCallback.onTransitionToIdle(); } return idle; }
The idea is to query the FragmentManager
with the tag of the loading dialog. If it is null, the DialogFragment
is not there, and we consider the app idle.
Using the idling resource in test
@Test public void done() { IdlingResource idlingResource = new DialogFragmentIdlingResource( activityRule.getActivity().getSupportFragmentManager(), LoadingDialogFragment.TAG); Espresso.registerIdlingResources(idlingResource); onView(withId(R.id.text)) .check(matches(withText(R.string.done))); Espresso.unregisterIdlingResources(idlingResource); }
We create an DialogFragmentIdlingResource
with the tag from the loading dialog so that it knows what to wait for. With that, the test will wait until the loading dialog dismisses before proceeding. And now the test passes!
Source code
https://github.com/chiuki/espresso-samples/
under idling-resource-dialog-fragment
on the solution
branch.
Like this article? Take a look at the outline of my Espresso book and fill in this form to push me to write it! Also check out the published courses: https://gumroad.com/chiuki