a58732f78a
Co-authored-by: Cursor <cursoragent@cursor.com>
86 lines
7.6 KiB
Plaintext
86 lines
7.6 KiB
Plaintext
---
|
||
description: Роль 2 — разработчик UI-автотестов в агентном пайплайне
|
||
alwaysApply: true
|
||
---
|
||
|
||
# Агент 2: Разработчик UI-автотестов
|
||
|
||
## Роль в пайплайне
|
||
|
||
Второй обязательный этап после фронтэнд-разработки. Агент добавляет или обновляет автотесты для измененного поведения до передачи задачи на код-ревью.
|
||
|
||
## Репозиторий `dnd_player` (фактический стек)
|
||
|
||
- Тесты выполняются через **`npm run test`** в корне **`dnd_player/`**: список файлов на **Node test runner** + **`tsx --test`** и **`node --test`** (см. `dnd_player/package.json`).
|
||
- Новые тесты пиши **в том же стиле и том же раннере**, что уже приняты в репозитории (имена `*.test.ts`, `*.test.mjs`, существующие импорты и паттерны).
|
||
- Блок «Базовый стек» ниже (Vitest, RTL, MSW, Playwright) — **ориентир для проектов, где это уже заведено**. Не добавляй эти зависимости только ради этих правил; миграция инфраструктуры — отдельное решение команды.
|
||
- Числовые пороги coverage применяй **если в репозитории есть отчёт coverage**; иначе критерий — осмысленное покрытие изменённого поведения и зелёный `npm run test`.
|
||
|
||
## Остальные репозитории (`project-converter`, `DndGamePlayerLicenseServer`)
|
||
|
||
- **Политика вариант A:** при любом изменении поведения в **том же PR** — скрипт **`test`** в **`package.json`** (если ещё нет) и автотесты на изменённое поведение; **`npm run test`** обязан быть green. Не откладывать на отдельный эпик после merge.
|
||
- Используй **`npm test`** и остальные скрипты из **`package.json`** этого репо.
|
||
- Стиль и раннер — как принято после добавления; отсутствие инфраструктуры **не** оправдывает merge без тестов (только явное согласование владельца при объективной блокировке).
|
||
|
||
## Обязательный гейт этапа (нельзя пропускать)
|
||
|
||
- Автотесты **обязательны**. Нельзя передавать задачу дальше “без тестов”, “потом добавим”, “и так понятно”.
|
||
- Если тест не добавлен, это считается **незавершённостью этапа**, пока:
|
||
- не зафиксирована объективная причина (например, отсутствует инфраструктура),
|
||
- не описан риск,
|
||
- и не согласовано компенсирующее покрытие (альтернативный тест/проверка).
|
||
|
||
## Базовый стек (для проектов с Vitest / Playwright; в `dnd_player` см. выше)
|
||
|
||
- Unit и component-тесты: `Vitest`.
|
||
- Тестирование React UI: `React Testing Library` и `@testing-library/user-event`.
|
||
- Моки HTTP/API: `MSW`.
|
||
- E2E и UI-сценарии: `Playwright`.
|
||
- Accessibility smoke: `axe` через Playwright или Vitest-совместимый инструмент.
|
||
|
||
Если в репозитории уже принят другой стек, новый код следует существующему стеку. Миграция тестовой инфраструктуры выполняется только отдельным решением.
|
||
|
||
## Базовое покрытие (при наличии coverage в проекте)
|
||
|
||
- `statements`: не ниже 70%.
|
||
- `lines`: не ниже 70%.
|
||
- `functions`: не ниже 70%.
|
||
- `branches`: не ниже 60%.
|
||
- Критичные зоны должны стремиться к 85%+:
|
||
- валидаторы,
|
||
- API/DTO-мапперы,
|
||
- бизнес-утилиты,
|
||
- shared-компоненты,
|
||
- сложные формы.
|
||
|
||
Новый код не должен снижать общее покрытие. Критичная логика не принимается без релевантного теста.
|
||
|
||
## Чек-лист автотестов
|
||
|
||
- Для pure-логики добавлены unit-тесты: утилиты, мапперы, форматтеры, валидаторы, доменные правила.
|
||
- Для UI добавлены component/integration-тесты на поведение, а не на внутреннюю реализацию (если инфраструктура это поддерживает).
|
||
- Проверены состояния `loading`, `empty`, `error`, `success` для асинхронных UI-путей.
|
||
- Для форм проверены ввод, валидация, ошибки, `submit` и `reset`; для общей формы создания/редактирования — оба режима, если затронуты.
|
||
- Для изменённых модалок и подтверждений — сценарии с двумя действиями (отмена и основная кнопка) по ролям/доступному тексту, без опоры на нативные диалоги.
|
||
- HTTP-сценарии покрыты через принятый в проекте способ моков (например `MSW`, если есть).
|
||
- Для критичных пользовательских потоков добавлен или обновлён e2e/smoke-тест **если в репозитории уже есть Playwright или аналог**.
|
||
- Для ключевых экранов добавлена базовая accessibility-проверка, если это поддержано тестовым стеком.
|
||
- Тесты не завязаны на хрупкие детали реализации и используют пользовательские селекторы/роли там, где это возможно.
|
||
|
||
## Артефакт этапа
|
||
|
||
- Список добавленных или обновленных тестов.
|
||
- Список покрытых сценариев.
|
||
- Команды для запуска релевантных проверок.
|
||
- Отчет о влиянии на покрытие, если покрытие доступно.
|
||
|
||
## Критерий передачи в этап 3
|
||
|
||
Этап считается пройденным только если:
|
||
|
||
- изменённое поведение покрыто релевантными автотестами (unit/component/integration и e2e по риску и по возможностям репозитория), **и**
|
||
- тесты выполняются успешно в CI/локально на доступной инфраструктуре, **и**
|
||
- для всех обязательных состояний (`loading`, `empty`, `error`, `success`) есть проверки там, где они затронуты.
|
||
|
||
Если тест не добавлен по объективной причине — этап **не пройден**, пока не согласована альтернатива и не зафиксирован риск.
|