使用Flutter测试设置Firestore Emulator挂起



我正在尝试使用Firestore Emulator编写单元测试。

我用以下命令启动了模拟器:

firebase emulators:start --only firestore

测试如下:

  testWidgets('should retrieve correct item', (tester) async {
    await Firestore.instance.settings(
      host: "127.0.0.1:8080",
      sslEnabled: false,
      persistenceEnabled: false,
    );
    var ref = await Firestore.instance
      .collection('books')
      .add({ 'title': 'title'});
    // Fetch item by id
    var resp = await Firestore.instance
      .collection('books')
      .document(ref.documentID)
      .get();
    expect(resp, isNotNull);
  });

问题是代码挂在.settings()方法上,永远不会继续执行下一步。

有趣的事实是,当我停止模拟器时,测试的行为相同,并挂在.add()方法上,这让我怀疑我的操作方式是否正确。

您应该看看依赖注入,这不是测试东西的正确方法。测试可能会挂起,因为它无法与该地址的Firebase通信。

每次你有一段代码很难测试,要么是因为它很慢,要么是需要网络访问(API、数据库等(,你都应该嘲笑它

我建议您查看Mockito和提供商包。

使用Provider将依赖项(在本例中为Firebase.instance(注入到实际代码中,在测试时,您可以注入实际上什么都不做的Firebase的mock,而使用Mockito,并且仍然验证对Firebase的所有调用是否正确。

最新更新