Автоматические тесты
Автоматические тесты проверяют поведение и внешний вид приложения без участия человека: тест сам нажимает кнопки, вводит текст и сверяет, что на экране оказалось то, что нужно.
Внутри FlutterFlow генерирует код для фреймворка интеграционного тестирования Flutter — его можно выгрузить и прогонять локально или в сервисах вроде Firebase Test Lab.
Автоматические тесты считаются устаревшим механизмом. Для новых проектов используйте Test Pilot: сценарии там описываются обычным текстом, а проходит их ИИ-агент.
- Free и Basic — автоматических тестов нет.
- Growth — 1 тест на проект.
- Business — до 3 тестов на проект.
- Enterprise — без ограничений.
Как устроен тест
Тест — это последовательность шагов, каждый из которых что-то делает с приложением. Прежде чем добавлять тесты, разберитесь с типами шагов и способами найти виджет.
Типы шагов
- Interact with Widget — действие над виджетом.
- Wait to Load (Pump & Settle) — пауза.
- Expect Result — проверка.
1. Interact with Widget
Шаг имитирует действие пользователя: нажатие на кнопку, ввод текста в поле. При добавлении задаются тип действия и способ найти виджет.
Тип действия
- Tap — одиночное нажатие.
- Double Tap — двойное нажатие.
- Long Press — нажатие с удержанием.
- Enter Text — ввод указанного текста.
- Scroll Until Visible — прокрутка, пока виджет не окажется на экране. В Delta задаётся шаг прокрутки в пикселях; если прокручиваемых виджетов несколько, нужный выбирается в свойстве Scrollable.
2. Wait to Load (Pump & Settle)
После действия приложению нужно время: обработать нажатие, загрузить данные, обновить состояние. Этот шаг даёт паузу, чтобы изменения успели дойти до экрана.
Настройки:
- Duration — сколько ждать; по умолчанию 100 мс.
- Timeouts — предельное время ожидания, после которого тест падает.
- Начинайте тест с паузы примерно на 3 секунды (3000 мс).
- После каждого шага «Interact with Widget» обычно нужна ещё одна пауза.
3. Expect Result
Проверка: после действия тест убеждается, что на экране получилось ожидаемое. Здесь нужно найти виджет и выбрать условие:
- Find Nothing — виджета на экране нет.
- Finds Num Widgets — виджетов ровно столько, сколько указано.
- Finds One Widget — виджет ровно один.
- Finds Widgets — виджетов несколько.
- Is Enabled — виджет не только виден, но и работает.
- Is Disabled — виджет отключён и на действия не отвечает.
- Has State — виджет в определённом состоянии, True или False: например, отмечен ли флажок.
Как найти виджет
Способ указать тесту, с каким именно виджетом работать:
- Select from UI Builder — выбрать виджет мышью прямо в редакторе.
- Find By ValueKey — по уникальному ValueKey. Задать его можно в свойстве Value Key в разделе Testing панели свойств виджета.
- Find By Type — по типу:
Text,Buttonи так далее. - Find By Semantics Label — по метке доступности.
- Find By Text — по тексту, который виджет показывает.
- Find By Descendent — по конкретному потомку или родителю.
Добавление тестов
Разберём на примере: проверим, что товар добавляется в избранное и убирается оттуда.
- Первый тест проверяет, что нужная страница открылась.
- Дальше находим кнопку избранного по ValueKey, равному идентификатору товара, и нажимаем на неё. ValueKey здесь обязателен: без него тест найдёт на странице несколько одинаковых кнопок избранного, не поймёт, какую нажимать, и упадёт.
- Тест на удаление из избранного проще всего сделать копией первого. На последнем шаге (Expect Result) поставьте Expectations в Finds Nothing — так тест убедится, что товар из списка исчез.

Запуск тестов
Тесты можно прогонять на своих устройствах или в сервисах вроде Firebase Test Lab.
Локально:
- Выгрузите код проекта.
- Откройте
your_project/integration_test/test.dart. - Отдельный тест запускается кнопкой воспроизведения рядом с ним, все сразу — двойным щелчком по такой кнопке рядом с
void main. - Либо из терминала:
flutter test integration_test/test.dart.
Запуск в Firebase Test Lab описан в документации Flutter.