15 KiB
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 регистрации - тестирует полный процесс регистрации
- Валидация формы - проверяет валидацию всей формы
- Состояния успеха/ошибки - тестирует различные состояния
- Редактирование данных - тестирует режим редактирования
- Загрузка - тестирует состояние загрузки
- Дополнительная информация - тестирует все дополнительные поля
- Физические параметры - тестирует ввод физических данных
- Информация о здоровье - тестирует медицинские данные
- Условия и политики - тестирует согласие с условиями
Запуск тестов
Запуск всех тестов регистрации:
flutter test test/features/registration/
Запуск конкретного файла тестов:
# Базовые тесты (рекомендуется)
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 шагов:
- Основная информация - имя, фамилия
- Учетные данные - email, пароль
- Пол - выбор пола
- Дата рождения - выбор даты
- Номер телефона - ввод телефона
- Рост - ввод роста
- Вес - ввод веса
- Обхват груди - ввод обхвата груди
- Обхват талии - ввод обхвата талии
- Обхват бедер - ввод обхвата бедер
- Давление - ввод показателей давления
- Медицинские условия - гипотония, гипертония
- Аллергии - информация об аллергиях
- Лекарства - принимаемые лекарства
- Дополнительная информация - спорт, еда, прочее
Зависимости
Тесты используют следующие пакеты:
flutter_test- основной пакет для тестированияmockito- для создания мок-объектовflutter_bloc- для тестирования BLoC/Cubitbuild_runner- для генерации мок-файлов
Генерация мок-файлов
После изменения тестов запустите:
dart run build_runner build --delete-conflicting-outputs
Это сгенерирует необходимые .mocks.dart файлы.
Результаты тестирования
Базовые тесты: ✅ 24 теста прошли успешно
- Покрывают основную функциональность регистрации
- Стабильны и быстры в выполнении
- Рекомендуются для регулярного запуска
Продвинутые тесты: Требуют реальных виджетов приложения
- Тестируют интеграцию с реальными компонентами
- Могут быть нестабильными при изменениях в UI
Интеграционные тесты: Полное тестирование экрана
- Тестируют весь workflow регистрации
- Требуют настройки зависимостей
Особенности регистрации
Регистрация в Eatvio имеет следующие особенности:
Многоэтапность:
- 15 шагов - регистрация разбита на логические этапы
- Прогресс-бар - отображение текущего прогресса
- Навигация - возможность перехода между шагами
Комплексность данных:
- Личная информация - имя, фамилия, пол, дата рождения
- Контактные данные - email, телефон
- Физические параметры - рост, вес, обхваты
- Медицинская информация - давление, заболевания
- Предпочтения - спорт, еда, аллергии
Валидация:
- Обязательные поля - проверка заполнения
- Формат данных - валидация email, телефона
- Совпадение паролей - проверка подтверждения
- Согласия - обязательное согласие с условиями
Безопасность:
- Маскировка паролей - скрытие ввода паролей
- Валидация email - проверка корректности email
- Согласие с условиями - юридическая защита
Модели данных
Тесты работают с моделями:
- UserRegistrationSheet - основная модель регистрации
- RegistrationState - состояние процесса регистрации
- RegistrationCubit - управление состоянием регистрации
Интеграция с аналитикой
Регистрация интегрирована с аналитикой:
- Отслеживание шагов - аналитика прогресса регистрации
- Метрики конверсии - отслеживание завершения регистрации
- A/B тестирование - тестирование различных вариантов форм
Локализация
Тесты поддерживают локализацию:
- Русский язык - основной язык интерфейса
- Многоязычность - поддержка других языков
- Локализованные сообщения - ошибки и подсказки
Производительность
Тесты оптимизированы для производительности:
- Быстрое выполнение - минимальное время выполнения
- Эффективное использование ресурсов - оптимизация памяти
- Параллельное выполнение - возможность параллельного запуска