es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Pruebas de Flutter: `throwsA` seguido de `ensureInitialized() + returnsNormally` rompe la prueba.

Estoy realizando pruebas unitarias de una función utilizando pruebas de Flutter y dividiendo las pruebas por grupos.

Me he dado cuenta de que si no utilizo TestWidgetsFlutterBinding.ensureInitialized(), obtengo algunos errores en el método asíncrono fetchTripList, por lo que he escrito una prueba para ello cuando FlutterBinding no está inicializado (ver el primer grupo en la imagen). Funciona bien siempre y cuando no inicialice FlutterBinding en el grupo SetUp(...).

Luego, en el siguiente grupo de pruebas, utilizo el método ensureInitialized() para que fetchTripList se ejecute normalmente. Sin embargo, obtengo un TestFailure porque parece que FlutterBinding no se ha inicializado… Además, las pruebas similares posteriores que requieren que FlutterBinding esté inicializado tienen éxito.

El mensaje “El operador de comprobación nulo…” se refiere a una excepción generada por await rootBundle.loadString(...) en el método fetchTripList.

Cosas que he intentado:
– He intentado comentar el primer grupo de pruebas y todo ha funcionado correctamente.
– He intentado mover el primer grupo de pruebas al final del conjunto de pruebas, pero ha fallado porque FlutterBinding ya estaba inicializado (y de forma permanente).
– He intentado eliminar la inicialización late + setUp(...) a favor de una asignación/inicialización en línea simple, pero no ha cambiado nada.

En este punto, estoy considerando diferentes opciones:
1. returnsNormally no debería estar envuelto por un await expectLater(...).
2. existe una alternativa a throwsA(...) que podría utilizar.
3. debería crear un nuevo archivo solo para el primer grupo (no es algo que me gustaría hacer).

¿Alguien tiene idea de cuál podría ser el problema o cómo resolver este enigma?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Parece que el problema está relacionado con la inicialización de FlutterBinding en los grupos de prueba. Cuando el primer grupo no inicializa FlutterBinding, el método fetchTripList arroja una excepción. Sin embargo, cuando el segundo grupo inicializa FlutterBinding, se produce un TestFailure porque FlutterBinding no se inicializó correctamente.

    Una posible solución es utilizar un archivo separado para el primer grupo de pruebas que no requiera que se inicialice FlutterBinding. Otra opción es refactorizar los grupos de prueba para que todos inicialicen FlutterBinding correctamente.

    Además, puede valer la pena investigar el uso de expectLater() y throwsA() para asegurarse de que se estén utilizando correctamente.

Comments are closed.