mirror of
https://github.com/Ku6epXBOCTuK/easy-png-tools.git
synced 2026-11-13 17:08:20 +00:00
88 lines
5.1 KiB
Markdown
88 lines
5.1 KiB
Markdown
# Стратегия 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-ов
|
|
|
|
1. `getByRole()` с доступным именем и `getByLabel()`.
|
|
2. Стабильные `href` или `id`, если семантического API нет.
|
|
3. Разрешённые `data-testid` только для визуальных границ, которые нельзя
|
|
надёжно назвать через accessibility API:
|
|
- `source-image`;
|
|
- `result-image`;
|
|
- `result-verdict`;
|
|
- `empty-state`.
|
|
4. `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. В комментарии указывается ссылка на неё. После исправления тест и
|
|
ссылка обновляются вместе; в текущем Q6a baseline активных fixme нет.
|
|
|
|
## 6. Проверки
|
|
|
|
Для изменений e2e выполняются:
|
|
|
|
```text
|
|
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.
|