Firebase 使用颤振测试挂起设置Firestore仿真器

Firebase 使用颤振测试挂起设置Firestore仿真器,firebase,flutter,google-cloud-firestore,firebase-cli,flutter-test,Firebase,Flutter,Google Cloud Firestore,Firebase Cli,Flutter Test,我正在尝试使用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: fals

我正在尝试使用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、数据库等),你都应该测试它

我建议你看一下包装和包装

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

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

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

我建议你看一下包装和包装


使用提供程序注入依赖项(
Firebase.instance
在本例中)在实际代码中,当进行测试时,您可以注入一个模拟Firebase,实际上它什么也不做,而使用Mockito,并且仍然验证对Firebase的所有调用是否正确。

实际上,小部件测试将模拟并阻止任何网络调用,无论是本地主机还是服务器。如果必须基于Firestore结果测试小部件,请尝试模拟该类。否则,试着使用<代码>测试来自
包的方法:测试
用于单元测试。非常感谢您提供此信息。我不知道小部件测试阻止了任何网络访问。实际上,小部件测试将模拟并阻止任何网络调用,无论是本地主机还是服务器。如果必须基于Firestore结果测试小部件,请尝试模拟该类。否则,试着使用<代码>测试来自
包的方法:测试
用于单元测试。非常感谢您提供此信息。我不知道小部件测试阻止了任何网络访问。嗨!谢谢你的回答。我知道依赖注入,并计划使用。这段代码只是重现问题的最简单的代码,去掉了与问题无关的任何内容,并尝试探索Firestore emulator的用法。无论如何,我不知道小部件测试阻止了任何网络使用,并将坚持模仿。这没关系,但你不应该编辑人们的答案添加信息,听起来好像他们说了,应该是一条评论。看起来我是在推荐这个软件包,但我自己从来没有用过,所以我不能推荐给任何人。当然!让我纠正一下。嗨!谢谢你的回答。我知道依赖注入,并计划使用。这段代码只是重现问题的最简单的代码,去掉了与问题无关的任何内容,并尝试探索Firestore emulator的用法。无论如何,我不知道小部件测试阻止了任何网络使用,并将坚持模仿。这没关系,但你不应该编辑人们的答案添加信息,听起来好像他们说了,应该是一条评论。看起来我是在推荐这个软件包,但我自己从来没有用过,所以我不能推荐给任何人。当然!让我纠正这一点。