5.1 KiB
Стратегия e2e-тестирования
Статус: active. Канонические правила для
web/e2e/; продуктовые решения и известные баги остаются вdocs/backlog.mdиdocs/checklist-manual-testing.md.
1. Что проверяем
E2E проверяет пользовательский контракт production UI: открытие маршрута, доступность элемента, загрузку или ввод данных, появление результата, ошибку, скачивание и переключение локали. Внутренняя реализация, порядок карточек, CSS-классы и конкретный формат временного URL не являются контрактом.
Точные переводы проверяются в unit-тестах i18n. В e2e проверяется поведение и отдельный RU/EN smoke, а не полный локализованный текст каждого verdict.
2. Приоритет locator-ов
getByRole()с доступным именем иgetByLabel().- Стабильные
hrefилиid, если семантического API нет. - Разрешённые
data-testidтолько для визуальных границ, которые нельзя надёжно назвать через accessibility API:source-image;result-image;result-verdict;empty-state.
input[type="file"]и download-button допускаются только внутриweb/e2e/helpers/page.ts.
Нельзя добавлять data-testid для счётчиков, групп, metadata, verdict текста,
кнопок темы или переключателя языка без отдельного обоснования.
3. Запрещённые зависимости
В e2e не фиксируются:
- абсолютные
TOTAL,GROUPSи другие snapshot-числа каталога; - точное число fuzzy-search результатов или порядок карточек;
- внутренние CSS-классы и HTML-структура, если есть role/label/href;
altкак способ найти результат или источник;- полные локализованные предложения и длинные тире в ожиданиях;
- локализованные имена контролов в общих сценариях без явной установки
en.
Поведенческий тест может проверять, что известный инструмент видим или скрыт, ошибка имеет текст и не является сырым i18n-ключом, результат доступен для скачивания. Это не требует повторять словарь в e2e.
4. Локаль и fixtures
Обычные сценарии запускаются с en через useEnglish() или openTool(). RU/EN
проверяется отдельным i18n.spec.ts; после смены локали locator не должен
зависеть от старого accessible name.
Изображения создаются воспроизводимыми helpers в web/e2e/helpers/fixtures.ts.
Тесты не добавляют большие бинарные файлы и не зависят от локальных
пользовательских файлов. toPass() допускается только для ограниченного
ожидания hydration или асинхронного результата; он не должен превращать проверку
продукта в бесконечный retry.
5. Helpers и test.fixme
web/e2e/helpers/page.ts владеет общими операциями openTool, uploadImage,
resultImage, sourceImage, verdictStatus, textResult, errorAlert,
emptyState, rangeInput и downloadResult. Специфика должна вызывать эти
helpers, а не повторять raw-селекторы.
test.fixme допускается только для зарегистрированной проблемы в backlog или
checklist. В комментарии указывается ссылка на неё; Q4 не исправляет продуктовое
поведение. После исправления тест и ссылка обновляются вместе.
6. Проверки
Для изменений e2e выполняются:
pnpm --dir web check
pnpm --dir web test:rules
pnpm --dir web lint:all
pnpm --dir web exec prettier --check .
pnpm check:docs
pnpm --dir web test:e2e
pnpm verify
verify не включает Playwright: E2E остаётся отдельным тяжёлым gate. В CI
non-blocking E2E не считается заменой локальному smoke; перед ревью фиксируются
число passed, skipped и известные fixme.