forked from eatvio/eatvio_app
148 lines
8.6 KiB
Markdown
148 lines
8.6 KiB
Markdown
# Widget Tests для создания диеты
|
||
|
||
Этот каталог содержит widget тесты для функциональности создания диеты в приложении Eatvio.
|
||
|
||
## Файлы тестов
|
||
|
||
### 1. `basic_widget_test.dart`
|
||
Основные widget тесты, которые проверяют базовую функциональность создания диеты:
|
||
|
||
- **Создание CreateDietCubit** - проверяет корректное создание cubit'а
|
||
- **Отображение полей формы** - проверяет наличие всех необходимых полей
|
||
- **Обновление полей** - проверяет корректное обновление полей при вводе данных
|
||
- **Выбор типа диеты** - проверяет функциональность выбора типа диеты
|
||
- **Продолжительность диеты** - проверяет выбор продолжительности
|
||
- **Статус диеты** - проверяет выбор статуса (активная, черновик, личная)
|
||
- **Отображение лейблов** - проверяет корректное отображение подписей полей
|
||
- **Placeholder текст** - проверяет отображение подсказок в полях
|
||
- **Кнопка публикации** - проверяет наличие и функциональность кнопки
|
||
- **Обработка нажатий** - проверяет корректную обработку нажатий на кнопки
|
||
- **Состояния загрузки** - проверяет отображение индикатора загрузки
|
||
- **Сообщения об ошибках** - проверяет отображение ошибок
|
||
- **Сообщения об успехе** - проверяет отображение сообщений об успешном выполнении
|
||
- **Валидация полей** - проверяет отображение ошибок валидации
|
||
- **Полная форма** - проверяет отображение всех полей формы
|
||
- **Опции типов диет** - проверяет отображение доступных типов диет
|
||
- **Опции продолжительности** - проверяет отображение доступных продолжительностей
|
||
|
||
### 2. `advanced_widget_test.dart`
|
||
Продвинутые тесты, которые работают с реальными виджетами приложения:
|
||
|
||
- **DietTypeChoiceWidget** - тестирует виджет выбора типа диеты
|
||
- **DietDurationDropDownWidget** - тестирует виджет выбора продолжительности
|
||
- **StatusDropDownWidget** - тестирует виджет выбора статуса
|
||
- **Интерактивность** - тестирует взаимодействие с виджетами
|
||
- **Макет экрана** - тестирует общий макет экрана создания диеты
|
||
- **Валидация** - тестирует валидацию с реальными виджетами
|
||
- **Планирование приемов пищи** - тестирует функциональность планирования
|
||
- **Выбор изображения** - тестирует функциональность выбора изображения
|
||
|
||
### 3. `integration_widget_test.dart`
|
||
Интеграционные тесты для полного экрана создания диеты:
|
||
|
||
- **CreateDietScreen** - тестирует весь экран создания диеты
|
||
- **Workflow создания** - тестирует полный процесс создания диеты
|
||
- **Валидация формы** - проверяет валидацию всей формы
|
||
- **Состояния успеха/ошибки** - тестирует различные состояния
|
||
- **Редактирование диеты** - тестирует режим редактирования
|
||
- **Загрузка** - тестирует состояние загрузки
|
||
|
||
## Запуск тестов
|
||
|
||
### Запуск всех тестов создания диеты:
|
||
```bash
|
||
flutter test test/features/create_diet/
|
||
```
|
||
|
||
### Запуск конкретного файла тестов:
|
||
```bash
|
||
# Базовые тесты (рекомендуется)
|
||
flutter test test/features/create_diet/basic_widget_test.dart
|
||
|
||
# Продвинутые тесты с реальными виджетами
|
||
flutter test test/features/create_diet/advanced_widget_test.dart
|
||
|
||
# Интеграционные тесты
|
||
flutter test test/features/create_diet/integration_widget_test.dart
|
||
```
|
||
|
||
## Структура тестов
|
||
|
||
Все тесты используют:
|
||
- **Mockito** для создания мок-объектов
|
||
- **Flutter Test** для widget тестирования
|
||
- **BlocProvider** для управления состоянием
|
||
- **Key** для поиска элементов по ключам
|
||
|
||
## Покрытие тестами
|
||
|
||
Тесты покрывают:
|
||
- ✅ Создание и инициализация CreateDietCubit
|
||
- ✅ Отображение всех полей формы (название, описание, продолжительность, статус)
|
||
- ✅ Выбор типа диеты (веганская, мясная, углеводная, легкая)
|
||
- ✅ Выбор продолжительности диеты (7, 14, 21, 30 дней)
|
||
- ✅ Выбор статуса диеты (активная, черновик, личная)
|
||
- ✅ Ввод данных в поля
|
||
- ✅ Валидация полей
|
||
- ✅ Обработка состояний (загрузка, ошибка, успех)
|
||
- ✅ Интерактивность (нажатия, ввод текста, выбор опций)
|
||
- ✅ Отображение лейблов и подсказок
|
||
- ✅ Планирование приемов пищи
|
||
- ✅ Выбор изображения диеты
|
||
- ✅ Редактирование существующих диет
|
||
|
||
## Типы диет
|
||
|
||
Тесты покрывают следующие типы диет:
|
||
- **Веганская** - без продуктов животного происхождения
|
||
- **Мясная** - с мясными продуктами
|
||
- **Углеводная** - с высоким содержанием углеводов
|
||
- **Легкая** - низкокалорийная диета
|
||
|
||
## Продолжительности диет
|
||
|
||
Тесты покрывают следующие продолжительности:
|
||
- **7 дней** - недельная диета
|
||
- **14 дней** - двухнедельная диета
|
||
- **21 день** - трехнедельная диета
|
||
- **30 дней** - месячная диета
|
||
|
||
## Статусы диет
|
||
|
||
Тесты покрывают следующие статусы:
|
||
- **Активная** - публичная диета
|
||
- **Черновик** - неопубликованная диета
|
||
- **Личная** - приватная диета
|
||
|
||
## Зависимости
|
||
|
||
Тесты используют следующие пакеты:
|
||
- `flutter_test` - основной пакет для тестирования
|
||
- `mockito` - для создания мок-объектов
|
||
- `flutter_bloc` - для тестирования BLoC/Cubit
|
||
- `build_runner` - для генерации мок-файлов
|
||
|
||
## Генерация мок-файлов
|
||
|
||
После изменения тестов запустите:
|
||
```bash
|
||
dart run build_runner build --delete-conflicting-outputs
|
||
```
|
||
|
||
Это сгенерирует необходимые `.mocks.dart` файлы.
|
||
|
||
## Результаты тестирования
|
||
|
||
**Базовые тесты**: ✅ 19 тестов прошли успешно
|
||
- Покрывают основную функциональность создания диеты
|
||
- Стабильны и быстры в выполнении
|
||
- Рекомендуются для регулярного запуска
|
||
|
||
**Продвинутые тесты**: Требуют реальных виджетов приложения
|
||
- Тестируют интеграцию с реальными компонентами
|
||
- Могут быть нестабильными при изменениях в UI
|
||
|
||
**Интеграционные тесты**: Полное тестирование экрана
|
||
- Тестируют весь workflow создания диеты
|
||
- Требуют настройки зависимостей
|