firebase - 使用 Mockito 为 Firebase 用户身份验证设置单元测试

标签 firebase flutter dart mockito flutter-test

我一直在尝试为我的 Firebase 用户身份验证类设置单元测试。我试过像许多教程所示那样做,但是由于 firebase 核心插件已经更新,他们已经改变了您必须设置环境的方式。我一直无法弄清楚如何使用 Mocks 调用 Firebase.initializeApp() 方法。插件提供的文档也没有透露任何解决方案。到目前为止,有人解决了这个问题吗?

class MockFirebaseAuth extends Mock implements fireAuth.FirebaseAuth {}

class MockFirebaseUser extends Mock implements fireAuth.User {}

class MockAuthResult extends Mock implements fireAuth.UserCredential {}

void main() async {
  TestWidgetsFlutterBinding.ensureInitialized();
  MockFirebaseAuth _auth = MockFirebaseAuth();
  BehaviorSubject<MockFirebaseUser> _user = BehaviorSubject<MockFirebaseUser>();
  when(_auth.authStateChanges()).thenAnswer((_) {
    return _user;
  });
  User user = User.instance(auth: _auth);

  group('User Model Test', () {
    String email = 'test@email.com';
    String password = '123456';

    when(_auth.signInWithEmailAndPassword(email: email, password: password)).thenAnswer((_) async {
      _user.add(MockFirebaseUser());
      return MockAuthResult();
    });
    test('sign in with email and password', () async {
      bool signedIn = await user.signIn(email, password);
      expect(signedIn, true);
      expect(user.status, Status.Authenticated);
    });
    test('sign out', () async {});
  });
}

抛出的错误:

[core/no-app] No Firebase App '[DEFAULT]' has been created - call Firebase.initializeApp()

最佳答案

你可以这样做:

 setUpAll(() async {
   
    await Firebase.initializeApp();

  });

关于firebase - 使用 Mockito 为 Firebase 用户身份验证设置单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64476408/

相关文章:

xml - 收到的XML响应是乱码

android - 免安装应用的 Firebase 支持库依赖冲突

flutter - 如何在 Dart 和 Flutter 中创建 DartDoc 宏/模板?

android-studio - Android Studio中有添加Flutter pub包的快捷方式吗?

dart - Dart UnitTest:orderedEquals与closeTo组合

ios - Flutter TextField Ipad中文输入法,选择始终放在最前面

javascript - 使用状态时在 React Native 中出现 undefined object 错误?

javascript - 提交表单并使用快照检索数据后,防止在未经身份验证的情况下在 Firebase 应用程序中重复邮件 ID 和电话号码

firebase - Vuex,在 Action 中改变状态

json - 使用Dart语言获取列表中的复杂格式数据