Тест Flutter - Firebase GoogleSignIn auth - ошибка: «тип 'MockAuthCredential' не является подтипом типа 'String'" - PullRequest
0 голосов
/ 04 мая 2020

Я пытаюсь автоматизировать тесты для своего проекта.

В своем проекте я использую аутентификацию 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

Кто-нибудь знает, что может быть неправым? Как мне это исправить? Спасибо!

...