Files
eatvio_app/test/features/create_diet/README.md
2025-10-21 21:02:17 +03:00

148 lines
8.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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 создания диеты
- Требуют настройки зависимостей