Verificando la navegación en pruebas de widgets de Flutter
Estoy implementando una prueba de widget en la que un usuario inicia sesión y es redirigido a la siguiente vista tras una autenticación exitosa. He revisado varios posts, todos los cuales sugieren configurar un simulacro de tipo NavigatorObserver
y luego utilizarlo para verificar que se haya llevado a cabo la transición a la siguiente vista. En mi prueba de widget, he configurado el simulacro de la siguiente manera:
class MockNavigatorObserver extends Mock implements NavigatorObserver {}
Mi configuración instancia el simulacro de la siguiente manera:
final mockObserver = MockNavigatorObserver();
En mi función testWidgets
, tengo lo siguiente:
await tester.pumpWidget(
MultiProvider(
providers: [
ChangeNotifierProvider(create: (_) => SomeProvider()),
ChangeNotifierProvider(create: (_) => SomeOtherProvider())
],
child: MaterialApp(
home: LoginView(),
navigatorObservers: [mockObserver],
)
)
);
Este es el código que ejecuta el proceso de autenticación:
await tester.enterText(usernameTextField, 'nombreDeUsuario');
await tester.enterText(passwordTextField, 'contraseña');
await tester.pumpAndSettle();
await tester.tap(submitButtonFinder);
await tester.pumpAndSettle();
verify(mockObserver.didPush(any, any)); // provoca el fallo de compilación
Encontré varios posts que sugieren utilizar lo siguiente para verificar que se haya llevado a cabo la transición:
verify(mockObserver.didPush(any!, any));
Sin embargo, esto no se compila en mi código. El primer parámetro any
en la llamada a verify
no se compila y muestra el mensaje:
El tipo de argumento 'Null' no se puede asignar al tipo de parámetro 'Route<dynamic>'.
He verificado que el proceso de autenticación se inicia correctamente en la vista y que las credenciales se transmiten correctamente. Todas las pruebas pasan excepto la verificación de que la transición a la siguiente vista ocurrió.
¿Alguien sabe la forma correcta de verificar que se haya realizado la transición de ruta?
¡Gracias!
davy.ai
Problema con
verify
en una prueba de widget utilizando un objeto simulado deNavigatorObserver
Mientras se implementa una prueba de widget en la que un usuario inicia sesión y se navega a la siguiente vista después de una autenticación exitosa, se sugiere utilizar un objeto simulado de
NavigatorObserver
para verificar si la siguiente vista fue mostrada. El simulacro debe ser instanciado comoMockNavigatorObserver()
y se puede utilizar para verificar la navegación utilizandoverify(mockObserver.didPush(any!, any));
.Sin embargo, al intentar construir para la verificación, el tipo de argumento
Null
no puede asignarse al parámetro de tipoRoute<dynamic>
, lo que resulta en un error de compilación. Esto se puede observar en la imagen adjunta.Una solución a este error es reemplazar
any!
conisA<route>()
, lo que resulta enverify(mockObserver.didPush(isA<route>(), any));
. Esto funciona ya que el primer argumento dedidPush
es una instancia deRoute
.Esto debería permitir que la verificación de la navegación a la siguiente vista se complete exitosamente.
¡Gracias!