Пакет в котором содержатся последние наработки Surf по Е2Е и Widget автотестам с использованием integration_test, flutter_test и flutter_gherkin
- integration_test + flutter_test:
- Базовые локаторы которые будут полезны всегда в BaseTestScreen
- Дополнительный Finder который позволяет менять skipOffstage свойство у существующих Finder'ов
- Задержки Duration которые часто используются
- Неявные ожидания разных видов
- Неявные действия использующие ожидания (тапы, свайпы, ввод текстов итд)
- Фикс создания отчета json при падении тестов в flutter_driver
- flutter_gherkin:
- given/when/then с передачей WidgetTester в колбеке для удобства
- ContextualWorld который позволяет передавать данные внутри сценария
- Хук для создания скриншота при падении и фикса ошибки с debugDefaultTargetPlatformOverride
- Обработка json отчета в формат пригодный для cucumber-html-reporter
Для использования достаточно добавить пакет в dev-зависимости в pubspec.yaml таким образом:
surf_flutter_test:
git:
url: https://github.com/surfstudio/surf-flutter-test
ref: main
Пакет можно использовать по разному, но основные варианты такие:
- В шагах используйте implicit действия, а так же pump из
implicit_actions.dart
иpumps.dart
При проверке условий используется функцияsafeEval
, возможно она будет полезна в других местах. - При написании шагов используйте testerWhen/Then/Given чтобы не писать в каждом
шаге
tester = context.world.rawAppDriver
. - При описании страниц в
test_screen/screens
наследуйтесь отBaseTestScreen
, инстансы страниц собирайте вtest_screen_library.dart
. - Чтобы была возможность передавать контекст внутри сценария используйте ContextWorld в
gherkin_suite_test.dart
. - Для фикса ошибки из-за платформы и чтобы скриншоты создавались безопасно используйте ConvenienceHook.
- В местах где нужны
Duration
, используйтеTestDelays
. Инстансы задержек можно хранить в библиотеке страниц. - В местах где нужны
Offset
используйтеBaseTestGestures
. Для фич создавайте свои классы и храните в том же файле что и страница. - Для изменения видимости Finder'а используйте
Finder.changeSkipOffstage
. - Для задания времени до выключения экрана на Android устройствах используйте
androidScreenDuration
в main блоке вызова flutter_driver. - Для фикса создания отчета при падении тестов, во время инициализации flutter_driver используйте
функцию
fixedIntegrationDriver
. В качестве колбека для драйвера используетсяwriteGherkinReports
по умолчанию. - Так же есть небольшая функция помогающая очистить строки от неразрывных пробелов
cleanOverflow
.