forked from eatvio/eatvio_app
254 lines
15 KiB
Markdown
254 lines
15 KiB
Markdown
# Widget Tests для регистрации
|
||
|
||
Этот каталог содержит widget тесты для функциональности регистрации пользователей в приложении Eatvio.
|
||
|
||
## Файлы тестов
|
||
|
||
### 1. `basic_widget_test.dart`
|
||
Основные widget тесты, которые проверяют базовую функциональность регистрации:
|
||
|
||
- **Создание RegistrationCubit** - проверяет корректное создание cubit'а
|
||
- **Отображение полей формы** - проверяет наличие всех необходимых полей
|
||
- **Обновление полей** - проверяет корректное обновление полей при вводе данных
|
||
- **Выбор пола** - проверяет функциональность выбора пола пользователя
|
||
- **Дата рождения** - проверяет выбор даты рождения
|
||
- **Номер телефона** - проверяет ввод номера телефона
|
||
- **Рост и вес** - проверяет ввод физических параметров
|
||
- **Отображение лейблов** - проверяет корректное отображение подписей полей
|
||
- **Placeholder текст** - проверяет отображение подсказок в полях
|
||
- **Кнопка регистрации** - проверяет наличие и функциональность кнопки
|
||
- **Обработка нажатий** - проверяет корректную обработку нажатий на кнопки
|
||
- **Состояния загрузки** - проверяет отображение индикатора загрузки
|
||
- **Сообщения об ошибках** - проверяет отображение ошибок
|
||
- **Сообщения об успехе** - проверяет отображение сообщений об успешном выполнении
|
||
- **Валидация полей** - проверяет отображение ошибок валидации
|
||
- **Полная форма** - проверяет отображение всех полей формы
|
||
- **Шаги регистрации** - проверяет отображение прогресса регистрации
|
||
- **Условия использования** - проверяет чекбокс согласия с условиями
|
||
- **Дополнительная информация** - проверяет поля для дополнительных данных
|
||
|
||
### 2. `advanced_widget_test.dart`
|
||
Продвинутые тесты, которые работают с реальными виджетами приложения:
|
||
|
||
- **NameScreen** - тестирует экран ввода имени и фамилии
|
||
- **CredentialsScreen** - тестирует экран ввода email и пароля
|
||
- **GenderScreen** - тестирует экран выбора пола
|
||
- **DateOfBirthScreen** - тестирует экран выбора даты рождения
|
||
- **Интерактивность** - тестирует взаимодействие с виджетами
|
||
- **Макет экрана** - тестирует общий макет экрана регистрации
|
||
- **Валидация** - тестирует валидацию с реальными виджетами
|
||
- **Прогресс регистрации** - тестирует отображение прогресса
|
||
- **Согласие с условиями** - тестирует функциональность согласия
|
||
|
||
### 3. `integration_widget_test.dart`
|
||
Интеграционные тесты для полного экрана регистрации:
|
||
|
||
- **RegistrationScreen** - тестирует весь экран регистрации
|
||
- **Workflow регистрации** - тестирует полный процесс регистрации
|
||
- **Валидация формы** - проверяет валидацию всей формы
|
||
- **Состояния успеха/ошибки** - тестирует различные состояния
|
||
- **Редактирование данных** - тестирует режим редактирования
|
||
- **Загрузка** - тестирует состояние загрузки
|
||
- **Дополнительная информация** - тестирует все дополнительные поля
|
||
- **Физические параметры** - тестирует ввод физических данных
|
||
- **Информация о здоровье** - тестирует медицинские данные
|
||
- **Условия и политики** - тестирует согласие с условиями
|
||
|
||
## Запуск тестов
|
||
|
||
### Запуск всех тестов регистрации:
|
||
```bash
|
||
flutter test test/features/registration/
|
||
```
|
||
|
||
### Запуск конкретного файла тестов:
|
||
```bash
|
||
# Базовые тесты (рекомендуется)
|
||
flutter test test/features/registration/basic_widget_test.dart
|
||
|
||
# Продвинутые тесты с реальными виджетами
|
||
flutter test test/features/registration/advanced_widget_test.dart
|
||
|
||
# Интеграционные тесты
|
||
flutter test test/features/registration/integration_widget_test.dart
|
||
```
|
||
|
||
## Структура тестов
|
||
|
||
Все тесты используют:
|
||
- **Mockito** для создания мок-объектов
|
||
- **Flutter Test** для widget тестирования
|
||
- **BlocProvider** для управления состоянием
|
||
- **Key** для поиска элементов по ключам
|
||
|
||
## Покрытие тестами
|
||
|
||
Тесты покрывают:
|
||
- ✅ Создание и инициализация RegistrationCubit
|
||
- ✅ Отображение всех полей формы (имя, фамилия, email, пароль, телефон)
|
||
- ✅ Выбор пола (мужской, женский)
|
||
- ✅ Выбор даты рождения
|
||
- ✅ Ввод номера телефона
|
||
- ✅ Ввод физических параметров (рост, вес)
|
||
- ✅ Ввод дополнительной информации (аллергии, лекарства, спорт)
|
||
- ✅ Ввод данных в поля
|
||
- ✅ Валидация полей
|
||
- ✅ Обработка состояний (загрузка, ошибка, успех)
|
||
- ✅ Интерактивность (нажатия, ввод текста, выбор опций)
|
||
- ✅ Отображение лейблов и подсказок
|
||
- ✅ Функциональность кнопки регистрации
|
||
- ✅ Прогресс регистрации (15 шагов)
|
||
- ✅ Согласие с условиями использования
|
||
- ✅ Согласие с политикой конфиденциальности
|
||
- ✅ Физические измерения (обхваты)
|
||
- ✅ Медицинская информация (давление, гипотония, гипертония)
|
||
- ✅ Предпочтения в еде (любимые и нелюбимые продукты)
|
||
|
||
## Типы полей регистрации
|
||
|
||
Тесты покрывают следующие типы полей:
|
||
|
||
### Основная информация:
|
||
- **Имя** - обязательное поле
|
||
- **Фамилия** - обязательное поле
|
||
- **Email** - обязательное поле с валидацией
|
||
- **Пароль** - обязательное поле с маскировкой
|
||
- **Подтверждение пароля** - обязательное поле с проверкой совпадения
|
||
|
||
### Личные данные:
|
||
- **Пол** - выбор из двух вариантов (мужской, женский)
|
||
- **Дата рождения** - выбор даты
|
||
- **Номер телефона** - ввод с маской
|
||
- **Рост** - числовое поле в сантиметрах
|
||
- **Вес** - числовое поле в килограммах
|
||
|
||
### Физические параметры:
|
||
- **Обхват груди** - числовое поле в сантиметрах
|
||
- **Обхват талии** - числовое поле в сантиметрах
|
||
- **Обхват бедер** - числовое поле в сантиметрах
|
||
|
||
### Медицинская информация:
|
||
- **Верхнее давление** - числовое поле
|
||
- **Нижнее давление** - числовое поле
|
||
- **Гипотония** - чекбокс
|
||
- **Гипертония** - чекбокс
|
||
|
||
### Дополнительная информация:
|
||
- **Аллергии** - многострочное текстовое поле
|
||
- **Принимаемые лекарства** - многострочное текстовое поле
|
||
- **Любимые виды спорта** - многострочное текстовое поле
|
||
- **Любимые продукты** - многострочное текстовое поле
|
||
- **Нелюбимые продукты** - многострочное текстовое поле
|
||
- **Дополнительная информация** - многострочное текстовое поле
|
||
|
||
### Согласия:
|
||
- **Условия использования** - чекбокс
|
||
- **Политика конфиденциальности** - чекбокс
|
||
|
||
## Шаги регистрации
|
||
|
||
Регистрация состоит из 15 шагов:
|
||
|
||
1. **Основная информация** - имя, фамилия
|
||
2. **Учетные данные** - email, пароль
|
||
3. **Пол** - выбор пола
|
||
4. **Дата рождения** - выбор даты
|
||
5. **Номер телефона** - ввод телефона
|
||
6. **Рост** - ввод роста
|
||
7. **Вес** - ввод веса
|
||
8. **Обхват груди** - ввод обхвата груди
|
||
9. **Обхват талии** - ввод обхвата талии
|
||
10. **Обхват бедер** - ввод обхвата бедер
|
||
11. **Давление** - ввод показателей давления
|
||
12. **Медицинские условия** - гипотония, гипертония
|
||
13. **Аллергии** - информация об аллергиях
|
||
14. **Лекарства** - принимаемые лекарства
|
||
15. **Дополнительная информация** - спорт, еда, прочее
|
||
|
||
## Зависимости
|
||
|
||
Тесты используют следующие пакеты:
|
||
- `flutter_test` - основной пакет для тестирования
|
||
- `mockito` - для создания мок-объектов
|
||
- `flutter_bloc` - для тестирования BLoC/Cubit
|
||
- `build_runner` - для генерации мок-файлов
|
||
|
||
## Генерация мок-файлов
|
||
|
||
После изменения тестов запустите:
|
||
```bash
|
||
dart run build_runner build --delete-conflicting-outputs
|
||
```
|
||
|
||
Это сгенерирует необходимые `.mocks.dart` файлы.
|
||
|
||
## Результаты тестирования
|
||
|
||
**Базовые тесты**: ✅ 24 теста прошли успешно
|
||
- Покрывают основную функциональность регистрации
|
||
- Стабильны и быстры в выполнении
|
||
- Рекомендуются для регулярного запуска
|
||
|
||
**Продвинутые тесты**: Требуют реальных виджетов приложения
|
||
- Тестируют интеграцию с реальными компонентами
|
||
- Могут быть нестабильными при изменениях в UI
|
||
|
||
**Интеграционные тесты**: Полное тестирование экрана
|
||
- Тестируют весь workflow регистрации
|
||
- Требуют настройки зависимостей
|
||
|
||
## Особенности регистрации
|
||
|
||
Регистрация в Eatvio имеет следующие особенности:
|
||
|
||
### Многоэтапность:
|
||
- **15 шагов** - регистрация разбита на логические этапы
|
||
- **Прогресс-бар** - отображение текущего прогресса
|
||
- **Навигация** - возможность перехода между шагами
|
||
|
||
### Комплексность данных:
|
||
- **Личная информация** - имя, фамилия, пол, дата рождения
|
||
- **Контактные данные** - email, телефон
|
||
- **Физические параметры** - рост, вес, обхваты
|
||
- **Медицинская информация** - давление, заболевания
|
||
- **Предпочтения** - спорт, еда, аллергии
|
||
|
||
### Валидация:
|
||
- **Обязательные поля** - проверка заполнения
|
||
- **Формат данных** - валидация email, телефона
|
||
- **Совпадение паролей** - проверка подтверждения
|
||
- **Согласия** - обязательное согласие с условиями
|
||
|
||
### Безопасность:
|
||
- **Маскировка паролей** - скрытие ввода паролей
|
||
- **Валидация email** - проверка корректности email
|
||
- **Согласие с условиями** - юридическая защита
|
||
|
||
## Модели данных
|
||
|
||
Тесты работают с моделями:
|
||
- **UserRegistrationSheet** - основная модель регистрации
|
||
- **RegistrationState** - состояние процесса регистрации
|
||
- **RegistrationCubit** - управление состоянием регистрации
|
||
|
||
## Интеграция с аналитикой
|
||
|
||
Регистрация интегрирована с аналитикой:
|
||
- **Отслеживание шагов** - аналитика прогресса регистрации
|
||
- **Метрики конверсии** - отслеживание завершения регистрации
|
||
- **A/B тестирование** - тестирование различных вариантов форм
|
||
|
||
## Локализация
|
||
|
||
Тесты поддерживают локализацию:
|
||
- **Русский язык** - основной язык интерфейса
|
||
- **Многоязычность** - поддержка других языков
|
||
- **Локализованные сообщения** - ошибки и подсказки
|
||
|
||
## Производительность
|
||
|
||
Тесты оптимизированы для производительности:
|
||
- **Быстрое выполнение** - минимальное время выполнения
|
||
- **Эффективное использование ресурсов** - оптимизация памяти
|
||
- **Параллельное выполнение** - возможность параллельного запуска
|