2016-07-26 9 views
0

Retrofit + RxJavaでサーバーの呼び出しを行いました。画面上の動作をテストしたいのですが。Androidのエスプレッソは観測可能からrxjava .delayを待っています

目的は、呼び出しを実行する前にロードイメージを設定し、結果を取得した後、読み込み中のイメージを非表示にしてデータを表示することです。

Observableクラスの "delay"メソッドを使ってモックをセットアップしようとしました。エスプレッソはイメージを見つけることができます。それは私が使用したコードです:

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())); 

テストを実行した後、私はエスプレッソが実際に実際にチェック(isDisplayed)を実行する前に、観察可能に設定された遅延を待っていることに気づきました。そうすれば、情報がロードされて読み込み中のイメージがなくなったことを確認するだけです。

これはRxJava/Espressoの通常の動作ですか?

もっと良い方法がありますか?

答えて

1

実行中のR.id.panel_loadingにアニメーションが存在する必要があります。

UIスレッドにアニメーションがある場合、エスプレッソは終了するまで待機します。

私は同じ問題を抱えていたし、私はここに私のカスタムの負荷のためのアニメーションを無効にする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は何か他のものでなければなりませんアニメーションを作るものではない場合。

これが役に立ちます。

+0

アニメーションの問題であることを受け入れることに消極的でしたが、他のいくつかのテストでは結果が乱雑でしたが、結局はアニメーションになることが判明しました。私の場合、私は、アプリケーションがデバッグモードで実行されているときにすべてのアニメーションを無効にしました。 –

関連する問題