Я пытаюсь автоматизировать тесты для своего проекта.
В своем проекте я использую аутентификацию firebase с методом GoogleSignIn.
Я пытаюсь научиться автоматизировать тестирование и использовать TDD разработки, и я изо всех сил пытаюсь заставить тест работать,
ниже мой код для GoogleSignIn
Future<Either<AuthFailure, Unit>> loginWithGoogleAccount() async {
final googleUser = await _googleSignIn.signIn();
if (googleUser == null) {
return left(const AuthFailure.cancelledByUser());
}
final googleAuthentication = await googleUser.authentication;
final authCredential = GoogleAuthProvider.getCredential(
idToken: googleAuthentication.idToken,
accessToken: googleAuthentication.accessToken,
);
return _firebaseAuth
.signInWithCredential(authCredential)
.then((value) => right(unit))
.catchError((e) => left(const AuthFailure.networkFailure())) as Either<AuthFailure, Unit>;}
и ниже мой тест файл
class MockFirebaseAuth extends Mock implements FirebaseAuth {}
class MockGoogleSignIn extends Mock implements GoogleSignIn {}
class MockGoogleSignInAccount extends Mock implements GoogleSignInAccount {}
class MockGoogleSignInAuthentication extends Mock
implements GoogleSignInAuthentication {}
class MockFirebaseUser extends Mock implements FirebaseUser {}
class MockAuthCredential extends Mock implements AuthCredential {}
class MockGoogleAuthProvider extends Mock implements GoogleAuthProvider {}
void main() {
MockFirebaseAuth mockFirebaseAuth;
MockFirebaseUser mockFirebaseUser;
MockGoogleSignIn mockGoogleSignIn;
MockGoogleSignInAccount mockGoogleSignInAccount;
MockGoogleSignInAuthentication mockGoogleSignInAuthentication;
IAuthFacade iAuthFacade;
MockAuthCredential mockAuthCredential;
MockGoogleAuthProvider mockGoogleAuthProvider;
setUp(() {
mockFirebaseAuth = MockFirebaseAuth();
mockFirebaseUser = MockFirebaseUser();
mockGoogleSignIn = MockGoogleSignIn();
mockGoogleSignInAccount = MockGoogleSignInAccount();
mockGoogleSignInAuthentication = MockGoogleSignInAuthentication();
iAuthFacade = FirebaseAuthFacade(mockFirebaseAuth, mockGoogleSignIn);
mockAuthCredential = MockAuthCredential();
mockGoogleAuthProvider = MockGoogleAuthProvider();
});
group('googleSignIn', () {
test(
'Should return cancelledByUser when GoogleSignIn return null',
() async {
//arrange
when(mockGoogleSignIn.signIn()).thenAnswer((_) async {
return null;
});
//act
final result = await iAuthFacade.loginWithGoogleAccount();
//assert
expect(result, left(const AuthFailure.cancelledByUser()));
},
);
test(
'Should return Unit when GoogleSignIn is succesfull',
() async {
//arrange
when(mockGoogleSignIn.signIn()).thenAnswer((_) async {
return mockGoogleSignInAccount;
});
when(mockGoogleSignInAccount.authentication).thenAnswer((_) async {
return mockGoogleSignInAuthentication;
});
when(GoogleAuthProvider.getCredential(
idToken: mockGoogleSignInAuthentication.idToken,
accessToken: mockGoogleSignInAuthentication.accessToken,
)).thenAnswer((_) {
return mockAuthCredential;
});
//act
final result = await iAuthFacade.loginWithGoogleAccount();
//assert
expect(result, right(unit));
},
);
});
}
И я получаю следующее ошибка для второго теста
type 'MockAuthCredential' is not a subtype of type 'String'
package:google_sign_in/google_sign_in.dart 28:14 MockGoogleSignInAuthentication.accessToken
package:live_genda/infrastructure/auth/firebase_auth_facade.dart 38:41 FirebaseAuthFacade.loginWithGoogleAccount
Кто-нибудь знает, что может быть неправым? Как мне это исправить? Спасибо!