我编写了一个集成测试来测试用户注册:
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:integration_test/integration_test.dart';
import 'package:my_pet_app/main.dart' as app;
import 'package:firebase_core/firebase_core.dart';
void main() async {
group('Register end to end', () {
IntegrationTestWidgetsFlutterBinding.ensureInitialized();
setUpAll(() async {
await Firebase.initializeApp();
});
testWidgets(
'tap to no account yet, enter new user credentials, user is forwarded to home screen',
(WidgetTester tester) async {
await tester.runAsync(() async {
app.main();
await tester.pumpAndSettle();
Finder but = find.byKey(Key('switchToRegistration'));
expect(but, findsOneWidget);
await tester.tap(but);
await tester.pumpAndSettle();
expect(find.byKey(Key('registerScreen')), findsOneWidget);
Finder emailField = find.byKey(Key('emailField'));
await tester.enterText(emailField, 'madness4@gmail.com');
Finder passwordField = find.byKey(Key('passwordField'));
await tester.enterText(passwordField, '123456');
Finder button = find.byKey(Key('signButton'));
expect(button, findsOneWidget);
await tester.tap(button);
await tester.pumpAndSettle();
});
});
});
}
直到最后一次点击的步骤都没有问题。最后一次点击触发了一个 signUp() 函数,该函数实际上设法在 Firebase 中创建一个新用户。(我已检查 - 测试完成后存储用户 madness4@gmail.com)。
这是AuthService
在 Firebase 中注册用户的函数:
Future registerWithEmailAndPassword(String email, String password) async {
try {
UserCredential authResult = await _auth.createUserWithEmailAndPassword(
email: email, password: password);
User? user = authResult.user;
return user != null ? _loggedInUser(user) : null;
} catch (e) {
// TODO: handle Exception properly
return null;
}
}
这里User? user = authResult.user;
永远不会调用该行(如果我放置断点 / 或使用 a ,它永远不会停在那里print()
),但是我没有看到抛出任何异常并且测试通过了。
有谁知道我应该如何解决这个问题?
再次:
- 用户是在实际的 firebase 身份验证数据库中创建的(但它没有运行 / 应用程序之后的代码没有关于登录用户的信息)
- 如果我正常运行应用程序(而不是作为测试) - 一切正常