0

我编写了一个集成测试来测试用户注册:

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 身份验证数据库中创建的(但它没有运行 / 应用程序之后的代码没有关于登录用户的信息)
  • 如果我正常运行应用程序(而不是作为测试) - 一切正常
4

0 回答 0