使用Flutter测试将Firestore模拟器设置为挂起

时间:2020-03-06 14:27:54

标签: 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: 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()方法上,这让我想知道我的操作方法是否正确。

1 个答案:

答案 0 :(得分:2)

您应该看看Dependency Injection,这不是测试内容的正确方法。可能由于无法在该地址与Firebase通信而导致测试挂起。

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

我建议您看看Mockitoprovider软件包。

使用Provider将依赖项(在这种情况下为Firebase.instance)注入您的实际代码中,并且在测试时,您可以注入模拟的Firebase,该模拟实际上不执行任何操作,而是使用Mockito并仍然验证对Firebase的所有调用都是正确的。 / p>