使用 Flutter 测试挂起设置 Firestore 模拟器
Setting Firestore Emulator with Flutter test hangs
我正在尝试使用 Firestore 模拟器编写单元测试。
我已经使用以下命令启动了模拟器:
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()
方法上,让我想知道我这样做的方式是否正确。
你应该看看 Dependency Injection,那不是测试东西的正确方法。测试可能挂起,因为它无法在该地址与 Firebase 通信。
每当您有一段代码难以测试时,无论是因为它很慢还是需要网络访问(API、数据库等),您都应该 mock 它。
我建议你看看 Mockito and provider 包。
使用 Provider 将依赖项(Firebase.instance
在这种情况下)注入到您的实际代码中,并且在测试时您可以注入一个 Firebase 的模拟,它实际上什么都不做,而不是使用 Mockito,并且仍然验证对 Firebase 的所有调用都是正确的.
我正在尝试使用 Firestore 模拟器编写单元测试。
我已经使用以下命令启动了模拟器:
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()
方法上,让我想知道我这样做的方式是否正确。
你应该看看 Dependency Injection,那不是测试东西的正确方法。测试可能挂起,因为它无法在该地址与 Firebase 通信。
每当您有一段代码难以测试时,无论是因为它很慢还是需要网络访问(API、数据库等),您都应该 mock 它。
我建议你看看 Mockito and provider 包。
使用 Provider 将依赖项(Firebase.instance
在这种情况下)注入到您的实际代码中,并且在测试时您可以注入一个 Firebase 的模拟,它实际上什么都不做,而不是使用 Mockito,并且仍然验证对 Firebase 的所有调用都是正确的.