Шаг 1: Понимание философии. Detox не похож на Selenium. Это не black-box тестирование через UI Automator/UIAutomation. Detox работает на уровне приложения, синхронизируясь с его асинхронными операциями. Он «знает», когда приложение простаивает (нет сетевых запросов, анимаций, таймеров), и только тогда выполняет действия или проверки. Это решает главную проблему E2E-тестов — хрупкость и нестабильность из-за таймаутов.
Шаг 2: Установка и настройка. Для React Native проект установка проста: `npm install -g detox-cli && npm install detox --save-dev`. Затем инициализация: `detox init`. Создастся конфигурационный файл `.detoxrc.json`, где нужно указать конфигурации (например, `ios.sim.debug`), пути к билдам и выбранный тест-раннер (Jest или Mocha). Для нативных проектов потребуется больше ручной настройки связей. Ключевой момент — сборка приложения в специальном тестовом режиме (с включенной синхронизацией Detox).
Шаг 3: Написание первого теста. Тесты пишутся на JavaScript. Пример для логина:
describe('Login flow', () => {
it('should login successfully', async () => {
await device.reloadReactNative(); // Перезагрузка приложения
await element(by.id('email_input')).typeText('user@test.com');
await element(by.id('password_input')).typeText('password123');
await element(by.id('login_button')).tap();
await expect(element(by.id('welcome_message'))).toBeVisible();
});
});
Селекторы (`by.id`, `by.text`) — основа стабильности. Используйте `testID`, прописанный в ваших React-компонентах или нативных вьюхах.
Шаг 4: Запуск и отладка. Запуск: `detox build --configuration ios.sim.debug` и `detox test --configuration ios.sim.debug`. Detox предоставляет подробные логи, а в случае падения теста — снимок экрана и иерархию вьюх. Можно использовать `--record-logs all` для детальной отладки.
Шаг 5: Интеграция в CI/CD. Это сила Detox. Его можно запускать на облачных сервисах (Bitrise, GitHub Actions, CircleCI) с использованием симуляторов iOS и эмуляторов Android. Настройка stage в pipeline: установка зависимостей, сборка приложения, запуск тестовой suites. Это позволяет предотвратить регрессии до попадания в прод.
Сравнительный анализ:
- Appium: Самый популярный аналог, с поддержкой множества платформ и языков. Это black-box инструмент, общающийся с приложением через WebDriver Protocol.
* Плюсы Detox: Высокая скорость и стабильность за счет gray-box подхода и синхронизации. Проще в настройке для RN и нативных проектов.
* Минусы Detox: Официально поддерживает только iOS, Android и React Native. Меньшее сообщество.
- Espresso (Android) / XCTest (iOS): Нативные фреймворки от Google и Apple.
- Maestro: Современный инструмент, набирающий популярность.
Итог: Detox — это выбор для команд, разрабатывающих на React Native или нативных платформах, которые ценят стабильность и скорость E2E-тестов и готовы вложиться в их интеграцию в процесс разработки. Для кросс-платформенных проектов с элементами WebView или большим разнообразием платформ стоит рассмотреть Appium. Нативные фреймворки остаются лучшим выбором для низкоуровневых UI-тестов.
Комментарии (10)