Flutter 集成测试在 Web 上运行两次

问题描述 投票:0回答:2

GitHub问题

设置:

  1. 克隆存储库
  2. 在另一个终端中运行
    chromedriver --port=4444
  3. 奔跑
    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);
    },
  );
}
flutter webdriver flutter-web flutter-test flutterdriver
2个回答
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
中运行它,它会表现得如此。


0
投票

使用以下命令,我成功启动了一个带有标签

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

上进行了测试
© www.soinside.com 2019 - 2024. All rights reserved.