如何使用 Firebase 测试 Flutter 应用程序?

Aur*_*May 5 testing unit-testing firebase flutter google-cloud-firestore

我使用 Flutter 和 Firebase 作为我的数据库。我想对我的应用程序进行一些单元测试,但是当我开始此测试时:

testWidgets('MyWidget has a title and message', (WidgetTester tester) async {
    // Create the widget by telling the tester to build it.
    await tester.pumpWidget(LoginPage());

    expect(true, true);
});
Run Code Online (Sandbox Code Playgroud)

我有一个例外:

尚未创建 Firebase 应用程序“[DEFAULT]” - 调用 Firebase.initializeApp()

但是 Firebase.initializeApp() 在我的 main.dart 中被调用:

Future<void> main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await Firebase.initializeApp();
  runApp(MyApp());
}
Run Code Online (Sandbox Code Playgroud)

而且我不知道如何在测试中初始化 Firebase 应用程序。

Ral*_*mos 3

将其发布为社区 wiki,因为它基于 @GuilhermeGabanelli 的评论。

如果您查看有关如何使用 Firebase 服务执行单元测试的flutterfire 文档,您将看到:

Firebase 库需要在实际设备或模拟器上运行。因此,如果您想运行单元测试,则必须使用 Fakes。Fake 是一个实现给定 Firebase 库的 API 并模拟其行为的库。

...

初始化应用程序时,您不是传递 Firebase 库的实际实例(例如,如果使用 Firestore,则为 FirebaseFirestore.instance),而是传递一个假实例(例如 FakeFirebaseFirestore())。然后应用程序的其余部分将像与 Firebase 对话一样运行。

接下来是带有示例代码的示例。我相信这是您面临问题的原因,如果您更改代码以使用 Fakes,则应该可以解决此问题。