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

Posted

技术标签:

【中文标题】如何使用 Firebase 测试 Flutter 应用程序?【英文标题】:How to test a Flutter application using Firebase? 【发布时间】:2021-06-28 13:15:58 【问题描述】:

我使用 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);
);

我有例外:

没有创建 Firebase 应用“[DEFAULT]” - 调用 Firebase.initializeApp()

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

Future<void> main() async 
  WidgetsFlutterBinding.ensureInitialized();
  await Firebase.initializeApp();
  runApp(MyApp());

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

【问题讨论】:

检查 this flutterfire doc,它显示了如何模拟和测试 Firebase 服务 【参考方案1】:

根据@GuilhermeGabanelli 的评论将此作为社区 wiki 发布。

如果您查看this flutterfire documentation 了解如何使用 Firebase 服务执行单元测试,您会看到:

Firebase 库需要在实际设备或模拟器上运行。所以如果你想运行单元测试,你将不得不使用 Fakes。 Fake 是一个实现给定 Firebase 库的 API 并模拟其行为的库。

...

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

后面是带有示例代码的示例。我相信这是您所面临问题的原因,如果您将代码更改为使用 Fakes,则应该解决此问题。

【讨论】:

以上是关于如何使用 Firebase 测试 Flutter 应用程序?的主要内容,如果未能解决你的问题,请参考以下文章

如何使 Android 和 iOS 的 Flutter App 崩溃(以测试 Firebase Crashlytics)?

如何在 Flutter 中设置不同的 firebase 环境

在 AWS Device Farm、Saucelabs、Firebase 测试实验室等中运行 Flutter 集成测试

如何在 Firebase 分析中跟踪 Flutter 屏幕?

如何从 Dart VM / Dart 集成测试访问 Firebase Firestore?

Flutter Firebase 函数的单元测试