Prueba Espresso con RxLoader
Tengo una actividad que utiliza RxLoader para buscar datos del servidor en la creación de actividad, y puebla una vista de lista. También tengo código de prueba que intenta hacer clic en la primera fila de la vista de lista después de que se llena.
Debido a que estoy usando RxLoader, tengo que escribir un IdlingResource personalizado para Espresso. Sin embargo, el problema es que la prueba finaliza (falla) antes de que mi lista se llene.
- No se puede eliminar la acción javaCompile antigua, tal vez el nombre de la clase ha cambiado
- AndroidRX - ejecuta el método en segundo plano
- Android RxJava 2 Prueba JUnit - getMainLooper en android.os.Looper no se burla de RuntimeException
- RxJava, buen caso de uso de flatmap
- RxJava - subir archivos secuencialmente - emitir el siguiente elemento, cuando onNext llamado
Aquí está mi código de actividad:
RxLoaderManager.get(this).create( "my_loader", mRestService.loadData(), new RxLoaderObserver<MyData>() { @Override public void onNext(MyData data) { // populate listview with data here ... } });
Aquí está mi implementación de IdlingResource:
public class IdlingApiServiceWrapper implements IdlingResource { public Observable<MyData> loadData(){ counter.incrementAndGet(); Observable<MyData> observable = api.loadData().finallyDo(new Action0() { @Override public void call() { counter.decrementAndGet(); notifyIdle(); } }); return observable;
}}
El problema es que: Cuando ejecuto el código de prueba, el método "counter.decrementAndGet ()" siempre se llama antes del método "onNext ()" en mi actividad. Mi prueba falla porque espera listview para ser poblada.
Aparentemente estoy haciendo algo mal. ¿Pero qué estoy haciendo mal?
ACTUALIZAR:
Aquí hay un fragmento de código más limpio para ilustrar el problema:
RxLoaderManager.get(this).create( "my_loader", myObservable.finallyDo(new Action0() { @Override public void call() { //log } }), new RxLoaderObserver<MyData>() { @Override public void onNext(MyData data) { // do something here } }).start();
En el código anterior, el fragmento de código dentro de finallyDo () se llama antes de la llamada "onNext ()" del observador. ¿Se supone que finallyDo () se llama después de "onNext ()"?
- RxJava: "java.lang.IllegalStateException: Sólo un suscriptor permitido!"
- Creando Observable sin utilizar Observable.create
- ¿Cómo obtener el último valor de BehaviorSubject?
- Manejo de excepciones API en RxJava
- Prueba de RxBinding RxSearchView
- Cuándo cancelar una suscripción
- Robolectric Test no llama a textWatcher.onTextChanged
- Cómo amortiguar solamente la última emisión de rx.Observable durante contrapresión
Evan Tatarka me indicó la dirección correcta: https://github.com/evant/rxloader/issues/14
Aquí está mi solución final:
public class IdlingApiServiceWrapper implements IdlingResource { public Observable<MyData> loadData() { counter.incrementAndGet(); Observable<MyData> observable = api.loadData().finallyDo(new Action0() { @Override public void call() { new Handler(Looper.getMainLooper()).post(new Runnable() { @Override public void run() { counter.decrementAndGet(); notifyIdle(); } }); } }); return observable; }
}
- Mantener la pantalla activada en Actividad – no funciona con FLAG_KEEP_SCREEN_ON
- Iconphont charachterspace colapsa en Android (Fontastic)