簡體   English   中英

如何使用 flutter 運行多個測試 - 集成測試

[英]How to run multiple tests with flutter - Integration Test

使用 flutter 中的測試和新的集成測試 package 沒有找到任何可以幫助我的東西。

我的問題是我需要運行幾個測試,但是當第一個測試結束或者第二個測試失敗時,因為當測試結束時,應用程序不會立即重新啟動。 我的代碼是這樣的:我不知道這是否是最好的方法。

void main() {
 (IntegrationTestWidgetsFlutterBinding.ensureInitialized()
  as IntegrationTestWidgetsFlutterBinding)
  .defaultTestTimeout = const Timeout(Duration(minutes: 2));

WelcomeTester welcomeTester;
LoginTester loginTester;

group('e2e integration test', () {
testWidgets('Test case 1',
        (WidgetTester tester) async {
  await app.main();
  await tester.pumpAndSettle(const Duration(seconds: 5));

  welcomeTester = WelcomeTester(tester);
  loginTester = LoginTester(tester);

  await welcomeTester.checkScreenOpenedByKey(WelcomeKeys.screenWelcomePage);
  await welcomeTester.findTitle();
  await welcomeTester.scrollThePage();
  await welcomeTester.tapButton(WelcomeKeys.btnHaveAccount);
  await welcomeTester.checkScreenOpenedByKey(LoginKeys.screenLoginPage);
  });

testWidgets('Test case 2',
        (WidgetTester tester) async {
  await tester.pumpAndSettle(const Duration(seconds: 5));

  welcomeTester = WelcomeTester(tester);

  await welcomeTester.checkScreenOpenedByKey(WelcomeKeys.screenWelcomePage);
  await welcomeTester.tapButton(WelcomeKeys.btnCreateAccount);
  await welcomeTester.checkScreenOpenedByKey(OnboardingKeys.screenTermsPage);
  });
 });
}

我的目標是在 app_test.dart 中創建幾個測試組,並在每個組中創建幾個 TestWidgets

每次應用更改時,您都需要使用它,讓它有機會進行下一個操作。

      await tester.pumpAndSettle();

在進入下一個操作之前先適應 UI。

文檔: https://api.flutter.dev/flutter/flutter_test/WidgetTester/pumpAndSettle.html

我不確定我是否理解您的問題,但其中一種解決方案可能會有所幫助。

解決方案 1

根據您運行測試的位置,這可能不是一個有效的答案,但如果您在本地運行它們,您可以將測試分成 2 個不同的測試文件。

然后你可以跑

flutter drive --flavor=staging --target=integration_test/test_1.dart --driver=test_driver/app_test.dart
flutter drive --flavor=staging --target=integration_test/test_2.dart --driver=test_driver/app_test.dart

這將在運行每個測試文件后從設備卸載並重新安裝您的應用程序。

方案二

您也可以像這樣在 tearDown 中刪除應用程序用戶數據

import 'dart:io';
import 'package:path_provider/path_provider.dart';
tearDown(() async {
    final filesDirPath = (await getApplicationSupportDirectory()).path;
    if (Directory(filesDirPath).existsSync()) {
      await Directory(filesDirPath).delete(recursive: true);
    }
});

這應該會以干凈的狀態恢復您的應用程序 state。可以刪除更多目錄,例如getTemporaryDirectory() ,但這通常是保存用戶數據的地方。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM