Разрешить запускать всю папку тестов в новых интеграционных тестах flutter - как обычные модульные тесты

У меня есть отдельный файл интеграционного теста для каждого экрана, и я хочу запустить все интеграционные тесты с помощью одной команды, например, «флаттер-тесты». Я заглянул в документ, но не смог найти способ сделать это. Это также вызывает проблему с apk лаборатории тестирования firebase. Чтобы создать тестовый apk для Android, я могу указать только один путь к тестовому файлу для создания apk.

// flutter build generates files in android/ for building the app
flutter build apk
./gradlew app:assembleAndroidTest
./gradlew app:assembleDebug -Ptarget=integration_test/whattodo_tests.dart

На данный момент я нашел два обходных пути для этого.

  1. Я переместил все свои тесты в один файл дротика с помощью группы . Но это обходное решение плохо масштабируется. Для теста 5-10 работает нормально. Но допустим, если у нас будет 50-75 тестов, тогда будет сложно ориентироваться и понимать тесты в одном файле.
  2. Создайте сценарий, чтобы запускать все тесты один за другим. Это может работать в нашем собственном конвейере CI, но не будет работать в лаборатории тестирования firebase.

Кто-нибудь может решить эту проблему или какое-либо лучшее решение?


person Burhanuddin Rashid    schedule 21.03.2021    source источник


Ответы (1)


Я наткнулся на один проект на GitHub с такой структурой, думаю, это может помочь ..

Создайте общий файл и импортируйте различные файлы, папки или модули в этот общий файл для тестирования.

main.dart

import 'package:integration_test/integration_test.dart';
import 'about_us_page_test.dart' as about;
import 'add_label_page_test.dart' as label;
import 'add_project_page_test.dart' as project;
import 'add_task_page_test.dart' as tasks;
import 'completed_tasks_page_test.dart' as tasks_completed;
import 'home_page_test.dart' as home;
import 'whattodo_tests.dart' as whattodo;

void main() {
  IntegrationTestWidgetsFlutterBinding.ensureInitialized();
  whattodo.main();
  home.main();
  tasks.main();
  tasks_completed.main();
  project.main();
  label.main();
  about.main();
}

к run all этим тестам

flutter drive \
   --driver=test_driver/integration_test_driver.dart \
   --target=integration_test/main.dart
person jignesh    schedule 26.03.2021
comment
Спасибо. Это работает, как ожидалось. Нам не нуженIntegrationTestWidgetsFlutterBinding.ensureInitialized(); в main.dart, поэтому мы можем его удалить. - person Burhanuddin Rashid; 27.03.2021
comment
Да @BurhanuddinRashid. Обычно мы не добавляем эту строку в каждый файл после создания такой структуры .. - person jignesh; 28.03.2021