Firebase 使用颤振测试挂起设置Firestore仿真器
我正在尝试使用Firestore Emulator编写单元测试 我已使用以下命令启动模拟器: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
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的用法。无论如何,我不知道小部件测试阻止了任何网络使用,并将坚持模仿。这没关系,但你不应该编辑人们的答案添加信息,听起来好像他们说了,应该是一条评论。看起来我是在推荐这个软件包,但我自己从来没有用过,所以我不能推荐给任何人。当然!让我纠正这一点。