Android Espresso 正在等待来自 observable 的 rxjava .delay
Android Espresso is waiting rxjava .delay from observable
我有一个使用 Retrofit + RxJava 进行的服务器调用,我想在屏幕上测试它的行为。
目标是在执行调用之前设置加载图像,并在获得结果后隐藏加载图像并显示数据。
我尝试使用 Observable class 中的 "delay" 方法设置模拟,以便 Espresso 可以找到图像。那是我使用的代码:
Observable<AccountDetails> observable = Observable.just(details)
.delay(5, TimeUnit.SECONDS)
.observeOn(AndroidSchedulers.mainThread())
.subscribeOn(Schedulers.io());
doReturn(observable).when(mScope).requestAccounts();
performServerCall();
onView(withId(R.id.panel_loading)).check(matches(isDisplayed()));
在 运行 测试之后,我意识到 Espresso 实际上是在等待 Observable 上设置的延迟,然后才真正执行检查 (isDisplayed)。这样它只会在信息加载完并且加载图像消失后检查。
这是 RxJava/Espresso 的正常行为吗?
有没有更好的方法实现这个?
R.id.panel_loading 中必须有正在执行的动画。
当 UI 线程中有动画时,espresso 会等待它完成。
我遇到了同样的问题,我做了一个 ViewAction 来禁用自定义加载的动画,代码如下:
public static ViewAction disableAnimations() {
return new ViewAction() {
@Override
public Matcher<View> getConstraints() {
return isAssignableFrom(CustomLoading.class);
}
@Override
public String getDescription() {
return "Disable animations";
}
@Override
public void perform(UiController uiController, View view) {
CustomLoading loading = (CustomLoading) view;
loading.setAnimations(false);
}
};
}
我在按下显示加载的按钮之前这样称呼它,因此测试不会等待:
onView(withId(R.id.panel_loading)).perform(disableAnimations());
如果 panel_loading 不是制作动画的那个,则必须是其他东西。
希望对您有所帮助。
我有一个使用 Retrofit + RxJava 进行的服务器调用,我想在屏幕上测试它的行为。
目标是在执行调用之前设置加载图像,并在获得结果后隐藏加载图像并显示数据。
我尝试使用 Observable class 中的 "delay" 方法设置模拟,以便 Espresso 可以找到图像。那是我使用的代码:
Observable<AccountDetails> observable = Observable.just(details)
.delay(5, TimeUnit.SECONDS)
.observeOn(AndroidSchedulers.mainThread())
.subscribeOn(Schedulers.io());
doReturn(observable).when(mScope).requestAccounts();
performServerCall();
onView(withId(R.id.panel_loading)).check(matches(isDisplayed()));
在 运行 测试之后,我意识到 Espresso 实际上是在等待 Observable 上设置的延迟,然后才真正执行检查 (isDisplayed)。这样它只会在信息加载完并且加载图像消失后检查。
这是 RxJava/Espresso 的正常行为吗?
有没有更好的方法实现这个?
R.id.panel_loading 中必须有正在执行的动画。
当 UI 线程中有动画时,espresso 会等待它完成。
我遇到了同样的问题,我做了一个 ViewAction 来禁用自定义加载的动画,代码如下:
public static ViewAction disableAnimations() {
return new ViewAction() {
@Override
public Matcher<View> getConstraints() {
return isAssignableFrom(CustomLoading.class);
}
@Override
public String getDescription() {
return "Disable animations";
}
@Override
public void perform(UiController uiController, View view) {
CustomLoading loading = (CustomLoading) view;
loading.setAnimations(false);
}
};
}
我在按下显示加载的按钮之前这样称呼它,因此测试不会等待:
onView(withId(R.id.panel_loading)).perform(disableAnimations());
如果 panel_loading 不是制作动画的那个,则必须是其他东西。
希望对您有所帮助。