Widget Tests для создания плана питания
Этот каталог содержит widget тесты для функциональности создания плана питания в приложении Eatvio.
Файлы тестов
1. basic_widget_test.dart
Основные widget тесты, которые проверяют базовую функциональность создания плана питания:
- Создание CreatePlanCubit - проверяет корректное создание cubit'а
- Отображение полей формы - проверяет наличие всех необходимых полей
- Обновление полей - проверяет корректное обновление полей при вводе данных
- Выбор типа плана - проверяет функциональность выбора типа плана питания
- Продолжительность плана - проверяет выбор продолжительности
- Статус плана - проверяет выбор статуса (активный, черновик, личный)
- Опции плана - проверяет настройку опций плана питания
- Отображение лейблов - проверяет корректное отображение подписей полей
- Placeholder текст - проверяет отображение подсказок в полях
- Кнопка публикации - проверяет наличие и функциональность кнопки
- Обработка нажатий - проверяет корректную обработку нажатий на кнопки
- Состояния загрузки - проверяет отображение индикатора загрузки
- Сообщения об ошибках - проверяет отображение ошибок
- Сообщения об успехе - проверяет отображение сообщений об успешном выполнении
- Валидация полей - проверяет отображение ошибок валидации
- Полная форма - проверяет отображение всех полей формы
- Опции типов планов - проверяет отображение доступных типов планов
- Опции продолжительности - проверяет отображение доступных продолжительностей
- Опции с ценами - проверяет отображение опций с ценообразованием
2. advanced_widget_test.dart
Продвинутые тесты, которые работают с реальными виджетами приложения:
- PlanTypeChoiceWidget - тестирует виджет выбора типа плана питания
- PlanDurationDropDownWidget - тестирует виджет выбора продолжительности
- OptionWidget - тестирует виджет настройки опций
- Интерактивность - тестирует взаимодействие с виджетами
- Макет экрана - тестирует общий макет экрана создания плана питания
- Валидация - тестирует валидацию с реальными виджетами
- Настройка опций - тестирует функциональность настройки опций
- Выбор изображения - тестирует функциональность выбора изображения
- Тарифные планы - тестирует отображение различных тарифных планов
3. integration_widget_test.dart
Интеграционные тесты для полного экрана создания плана питания:
- CreatePlanScreen - тестирует весь экран создания плана питания
- Workflow создания - тестирует полный процесс создания плана питания
- Валидация формы - проверяет валидацию всей формы
- Состояния успеха/ошибки - тестирует различные состояния
- Редактирование плана - тестирует режим редактирования
- Загрузка - тестирует состояние загрузки
- Опции плана - тестирует настройку опций плана питания
Запуск тестов
Запуск всех тестов создания плана питания:
flutter test test/features/create_plan/
Запуск конкретного файла тестов:
# Базовые тесты (рекомендуется)
flutter test test/features/create_plan/basic_widget_test.dart
# Продвинутые тесты с реальными виджетами
flutter test test/features/create_plan/advanced_widget_test.dart
# Интеграционные тесты
flutter test test/features/create_plan/integration_widget_test.dart
Структура тестов
Все тесты используют:
- Mockito для создания мок-объектов
- Flutter Test для widget тестирования
- BlocProvider для управления состоянием
- Key для поиска элементов по ключам
Покрытие тестами
Тесты покрывают:
- ✅ Создание и инициализация CreatePlanCubit
- ✅ Отображение всех полей формы (название, описание, продолжительность, статус)
- ✅ Выбор типа плана питания (похудение, фитнес, здоровье, поведение)
- ✅ Выбор продолжительности плана (7, 14, 21, 30 дней)
- ✅ Выбор статуса плана (активный, черновик, личный)
- ✅ Настройка опций плана питания
- ✅ Ввод данных в поля
- ✅ Валидация полей
- ✅ Обработка состояний (загрузка, ошибка, успех)
- ✅ Интерактивность (нажатия, ввод текста, выбор опций)
- ✅ Отображение лейблов и подсказок
- ✅ Настройка опций с ценообразованием
- ✅ Выбор изображения плана питания
- ✅ Редактирование существующих планов
- ✅ Тарифные планы (базовый, премиум)
Типы планов питания
Тесты покрывают следующие типы планов:
- Похудение - план для снижения веса
- Фитнес - план для активного образа жизни
- Здоровье - план для общего оздоровления
- Поведение - план для изменения пищевых привычек
Продолжительности планов
Тесты покрывают следующие продолжительности:
- 7 дней - недельный план
- 14 дней - двухнедельный план
- 21 день - трехнедельный план
- 30 дней - месячный план
Статусы планов
Тесты покрывают следующие статусы:
- Активный - публичный план питания
- Черновик - неопубликованный план
- Личный - приватный план
Опции планов питания
Тесты покрывают настройку опций:
- Базовая опция - включает базовое меню и консультации
- Премиум опция - включает расширенное меню и персональные консультации
- Ценообразование - настройка цен для различных опций
- Описания опций - детальное описание каждой опции
Зависимости
Тесты используют следующие пакеты:
flutter_test- основной пакет для тестированияmockito- для создания мок-объектовflutter_bloc- для тестирования BLoC/Cubitbuild_runner- для генерации мок-файлов
Генерация мок-файлов
После изменения тестов запустите:
dart run build_runner build --delete-conflicting-outputs
Это сгенерирует необходимые .mocks.dart файлы.
Результаты тестирования
Базовые тесты: ✅ 21 тест прошел успешно
- Покрывают основную функциональность создания плана питания
- Стабильны и быстры в выполнении
- Рекомендуются для регулярного запуска
Продвинутые тесты: Требуют реальных виджетов приложения
- Тестируют интеграцию с реальными компонентами
- Могут быть нестабильными при изменениях в UI
Интеграционные тесты: Полное тестирование экрана
- Тестируют весь workflow создания плана питания
- Требуют настройки зависимостей
Особенности планов питания
Планы питания отличаются от диет и рецептов:
Отличия от диет:
- Коммерческая направленность - планы питания предназначены для продажи
- Опции и тарифы - возможность настройки различных опций с разными ценами
- Типы планов - более специфичные типы (похудение, фитнес, здоровье, поведение)
- Продолжительность - гибкая настройка продолжительности
Отличия от рецептов:
- Структурированность - планы питания имеют четкую структуру с опциями
- Ценообразование - встроенная система ценообразования
- Коммерческий характер - предназначены для монетизации
- Комплексность - включают не только рецепты, но и консультации
Модели данных
Тесты работают с моделями:
- CreatePlanModel - модель для создания плана питания
- PlanModel - модель плана питания
- PlanType - тип плана питания (slim, fit, wellness, behavior)
- PacketOptions - опции пакета плана питания
- PlanValidationState - состояние валидации плана питания
- OptionValidationState - состояние валидации опций