24 lines
2.4 KiB
Markdown
24 lines
2.4 KiB
Markdown
# Testing
|
|
|
|
Canonical completion gate — `npm run verify`; он запускает Vitest один раз
|
|
через `npm run test:coverage`. `npm run test:run` остаётся короткой локальной
|
|
командой без coverage report.
|
|
|
|
Выбор нового теста определяется риском поведения, а не фактом изменения файла.
|
|
Автоматический тест обязателен для security/privacy, денежных расчётов,
|
|
целостности данных, concurrency, публичного контракта, критического journey и
|
|
регрессии. DTO без логики, декларативная конфигурация, тонкая orchestration и
|
|
поведение зависимости отдельного unit test не требуют, пока у них нет
|
|
собственного branching, transformation, invariant или regression. Полная
|
|
policy находится в [engineering governance](../../docs/development/engineering-governance.md).
|
|
|
|
MSW запускается только Vitest setup в `src/test/`; handlers покрывают текущий API. Не добавлять service worker, browser mocking или mock development mode. Для transport проверять заголовки и retry через MSW, не через реальный backend.
|
|
|
|
Проверяйте наблюдаемое поведение, а не детали реализации. UI-тест строится как Arrange, Act, Assert; для интерактивных действий предпочитайте `userEvent`. Форма должна проверять валидацию и отсутствие запроса при невалидных данных; маршруты - редиректы и доступность экрана.
|
|
|
|
Colocated tests finance views фиксируют выбор loading/error/empty/loaded и доступные recovery actions. Route boundary tests используют test-only throwing route и проверяют безопасную ссылку и reset после navigation.
|
|
|
|
Coverage floors остаются anti-regression constraint. Нельзя добавлять тест,
|
|
который только повторяет декларативную структуру или внутренности зависимости,
|
|
ради повышения процента.
|