使用Mockito设置Firebase用户身份验证的单元测试
我一直在尝试为我的Firebase用户身份验证类设置单元测试。我已经尝试过像许多教程所展示的那样去做,但是由于firebase核心插件有了更新,它们已经改变了您必须设置环境的方式。我还没有弄清楚如何使用mock调用Firebase.initializeApp()方法。插件提供的文档也没有透露任何解决方案。到目前为止有人解决了这个问题吗使用Mockito设置Firebase用户身份验证的单元测试,firebase,flutter,dart,mockito,flutter-test,Firebase,Flutter,Dart,Mockito,Flutter Test,我一直在尝试为我的Firebase用户身份验证类设置单元测试。我已经尝试过像许多教程所展示的那样去做,但是由于firebase核心插件有了更新,它们已经改变了您必须设置环境的方式。我还没有弄清楚如何使用mock调用Firebase.initializeApp()方法。插件提供的文档也没有透露任何解决方案。到目前为止有人解决了这个问题吗 class MockFirebaseAuth extends Mock implements fireAuth.FirebaseAuth {} class Mo
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 {});
});
}
类MockFirebaseAuth扩展Mock实现fireAuth.FirebaseAuth{}
类MockFirebaseUser扩展Mock实现fireAuth.User{}
类MockAuthResult扩展了Mock实现fireAuth.UserCredential{}
void main()异步{
TestWidgetsFlutterBinding.ensureInitialized();
MockFirebaseAuth_auth=MockFirebaseAuth();
行为主体_user=BehaviorSubject();
当(_auth.authStateChanges())时。然后回答{
返回用户;
});
User=User.instance(auth:_auth);
组('用户模型测试',(){
字符串电子邮件test@email.com';
字符串密码='123456';
当(_auth.signin with email and password(email:email,password:password))。然后回答(_)异步{
_添加(MockFirebaseUser());
返回MockAuthResult();
});
测试('使用电子邮件和密码登录',()异步{
bool signedIn=等待用户.signIn(电子邮件、密码);
期望(签名,真);
expect(user.status、status.Authenticated);
});
测试('注销',()异步{});
});
}
抛出错误:
[核心/无应用程序]未创建Firebase应用程序“[默认]”-调用Firebase.initializeApp()
您可以这样做:
setUpAll(() async {
await Firebase.initializeApp();
});