Espresso - утверждение TextView с асинхронными загруженными данными

Я пишу тест пользовательского интерфейса с Google Espresso для Android, и я зациклился на том, как утверждать текст TextView, содержимое которого асинхронно загружается из веб-службы. Мой текущий код:

public class MyTest extends BaseTestCase<MyActivity>{
    public void setUp() throws Exception {
        // (1) Tell the activity to load 'element-to-be-loaded' from webservice
        this.setActivityIntent(new Intent(Intent.ACTION_VIEW, Uri.parse("data://data/element-to-be-loaded")));
        getActivity();

        super.setUp();
    }

    public void testClickOnReviews(){
        // (2) Check the element is loaded and its name is displayed
        Espresso
            .onView(ViewMatchers.withId(R.id.element_name))
            .check(ViewAssertions.matches(ViewMatchers.withText("My Name")));

        // (3) Click on the details box
        Espresso
            .onView(ViewMatchers.withId(R.id.details_box))
            .check(ViewAssertions.matches(ViewMatchers.isDisplayed()))
            .perform(ViewActions.click());

        // (4) Wait for the details screen to open
        Espresso
            .onView(ViewMatchers.withId(R.id.review_box));

        // Go back to element screen
        Espresso.pressBack();
    }
}

В (1) я информирую свою активность о загрузке элемента из веб-службы. На (2) я жду представления, утверждающего его содержимое. Это та часть, которую тест терпит неудачу, потому что он выполняется до того, как веб-сервис отвечает на приложение.

Как я могу сказать Espresso ждать появления определенного фрагмента данных на экране? Или я должен думать иначе, чтобы написать такой тест?

Ответ 1

Вы можете обработать этот случай, зарегистрировав IdlingResource для своего веб-сервиса с помощью Espresso. Взгляните на эту запись: https://developer.android.com/training/testing/espresso/idling-resource.html

Скорее всего, вы захотите использовать CountingIdlingResource (который использует простой счетчик для отслеживания, когда что-то не работает). Этот образец теста показывает, как это можно сделать.