设置:
chromedriver --port=4444
flutter drive --driver=test_driver/integration_test.dart --target=integration_test/example_test.dart -d chrome
测试似乎运行了两次,因为 Firestore 中插入了两个文档,而应该只插入一个文档。
此行为仅发生在 Web 上,在 iOS 上不会产生相同的行为
如果您克隆存储库并自行测试,请将
examples
的集合名称更改为其他名称,以免与其他测试人员发生冲突
删除存储库时的代码
void main() {
IntegrationTestWidgetsFlutterBinding.ensureInitialized();
final now = DateTime.now();
const String collectionName = 'examples';
String currentMinute = DateFormat.yMd().add_jm().format(now);
documentsInsertedThisMinute() async {
var collection = FirebaseFirestore.instance.collection(collectionName);
var snapshots =
await collection.where('foobar', isEqualTo: currentMinute).get();
return snapshots.size;
}
setUpAll(() async {
await Firebase.initializeApp(
options: DefaultFirebaseOptions.currentPlatform,
);
});
testWidgets(
'Single document created',
(WidgetTester tester) async {
int preExistingDocuments = await documentsInsertedThisMinute();
print('Pre-existing documents: $preExistingDocuments');
await tester.pumpWidget(const MyApp());
await FirebaseFirestore.instance
.collection(collectionName)
.doc()
.set({'foobar': currentMinute});
int documentsAfterSingleInsert = await documentsInsertedThisMinute();
expect(documentsAfterSingleInsert, 1);
},
);
}
在使用带有或不带有
-d chrome
标志的 --headless
时,我运行代码两次时遇到了同样的问题。
我用的:
多行Linux
flutter drive \
--driver=test_driver/integration_test.dart \
--target=integration_test/sec_rules_test.dart \
--device-id web-server \
--dart-define=PROJECT_ID=someProjectId
多行Windows(Powershell)
flutter drive `
--driver=test_driver/integration_test.dart `
--target=integration_test/example_test.dart `
--device-id web-server `
--dart-define=PROJECT_ID=someProjectId
也记录在here,当然它没有指定您是否在
-d chrome
中运行它,它会表现得如此。
使用以下命令,我成功启动了一个带有标签
chrome is controlled by automatically
的 Chrome 实例
flutter drive --driver="test_driver/integration_test.dart" --target="integration_test/integration_test.dart" -d web-server --browser-name chrome --no-headless
注意:我在
flutter version 3.7.0
上进行了测试