Files
CursorAi/.cursor/rules/agent-2-ui-test-developer.mdc
T
2026-05-11 22:20:28 +08:00

86 lines
7.6 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
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`) есть проверки там, где они затронуты.
Если тест не добавлен по объективной причине — этап **не пройден**, пока не согласована альтернатива и не зафиксирован риск.