Bom dia. Amigos estou com dúvida em um projeto quando tento mockar o Repositório de Autenticação.
/// 5º passo - verificar a chamada do método verify(mockAuthRepository.loginUsuario(email: email, senha: senha)).called(1);
Nesse 5º passo parece que o método loginUsuario() não é chamado
@GenerateMocks([AuthRepository])
main() {
testWidgets('Deve realizar o login', (tester) async {
final mockAuthRepository = MockAuthRepository();
final email = 'teste@teste.com';
final senha = 'senha123';
Get.create<AuthRepository>(
() => MockAuthRepository(),
);
await tester.pumpWidget(
GetMaterialApp(
title: "Application",
initialRoute: AppPages.INITIAL,
getPages: AppPages.routes,
),
);
/// Acha a instância do LoginController
bool test = Get.isRegistered<LoginController>();
expect(test, true);
LoginController controller = Get.find();
/// 1º passo - apresentar o LoginView
final loginView = find.byType(LoginView);
expect(loginView, findsOneWidget);
/// 2º passo - digitar no campo o e-mail
final emailTextFormField =
find.byWidgetPredicate((widget) => keyMatcher(widget, 'inputEmail'));
expect(emailTextFormField, findsOneWidget);
await tester.enterText(emailTextFormField, email);
/// 3º passo - digitar no campo o e-mail
final senhaTextFormField =
find.byWidgetPredicate((widget) => keyMatcher(widget, 'inputEmail'));
expect(senhaTextFormField, findsOneWidget);
await tester.enterText(senhaTextFormField, senha);
/// 4º passo - Clicar no button Entrar
final button =
find.byWidgetPredicate((widget) => keyMatcher(widget, 'submitButton'));
expect(button, findsOneWidget);
final user = await credenciais();
when(mockAuthRepository.loginUsuario(email: email, senha: senha))
.thenAnswer((_) async => Future.value(user));
await tester.tap(button);
await tester.pumpAndSettle();
/// 5º passo - verificar a chamada do método
verify(mockAuthRepository.loginUsuario(email: email, senha: senha)).called(1);
});
}
/// Cria um UserCrendential fake
Future<UserCredential?> credenciais() async {
try {
final googleSignIn = MockGoogleSignIn();
final signinAccount = await googleSignIn.signIn();
final googleAuth = await signinAccount!.authentication;
final AuthCredential credential = GoogleAuthProvider.credential(
accessToken: googleAuth.accessToken,
idToken: googleAuth.idToken,
);
// Sign in.
final user = MockUser(
isAnonymous: false,
uid: 'testeId',
email: 'teste@teste.com',
displayName: 'Teste',
);
final auth = MockFirebaseAuth(mockUser: user);
final userCredential = await auth.signInWithCredential(credential);
return userCredential;
} catch (e) {
print('Erro ao criar uma credencial Fake: $e');
}
}
/// Verifica a igualdade da Key de um Widget
bool keyMatcher(Widget widget, key) {
return widget.key == Key(key) ? true : false;
}
══╡ EXCEPTION CAUGHT BY FLUTTER TEST FRAMEWORK ╞════════════════════════════════════════════════════
The following TestFailure object was thrown running a test:
No matching calls (actually, no calls at all).
(If you called verify(...).called(0);
, please instead use verifyNever(...);
.)