Files
backend/.ai/conventions/backend-testing.md
T

4.5 KiB
Raw Blame History

Backend testing

Выбор уровня

Применяй общие testing risks. Тесты должны различать правильное и неправильное наблюдаемое поведение.

Что меняется Проверка
Pure mapper/decimal/domain branch Unit со значимыми edge cases
Service orchestration/access/retry policy Jest с mocks внешних boundaries и observable outcome
Pipe/guard/cookie/status/HTTP error Configured Nest HTTP boundary; прямого вызова метода controller недостаточно
OpenAPI metadata/wire schema test:openapi-contract + потребительский contract check
DB constraint/CAS/transaction/migration Integration с изолированной реальной DB
Только DTO declarations/thin wiring Existing contract/type/build без искусственного unit test

Unit specs colocated в src/**/*.spec.ts; HTTP/integration — test/. Мокируй T-Bank, время и нужную DB boundary, а не проверяемую business-функцию. Не зови реальный внешний account/API. Expected error/code, отсутствие запроса при недопустимом доступе и сохранение данных важнее private method call count.

Случаи и примеры

  • BrokerageAccountsService tests: отсутствие connection не вызывает upstream, нормализация и точные суммы.
  • AuthService tests: invalid/expired/superseded token и concurrent rotation; mock race test не является доказательством DB transaction.
  • HTTP filter tests: безопасный error envelope.
  • OpenAPI integration: configured app + frontend snapshot, без записи snapshot и без T-Bank.

При bug сначала воспроизведи именно его исход, затем исправь responsible owner. Не создавай tests для каждой декларации, logs строки или поведения Prisma/Nest без собственного инварианта. Coverage не имеет общего threshold.

Команды и ограничения

Итерация: npm test -- --runInBand <pattern>, затем нужный typecheck/lint. Полный npm run verify включает lint, оба typecheck, Jest и build. npm run test:openapi-contract — отдельный required check при wire contract change.

npm run test:e2e существует, но известный Prisma migration blocker описан в ограничении сквозной проверки и WL-P2-05 registry. Скрипт использует фиксированную /tmp/wealth-ledger-e2e.db; не запускай его конкурентно как независимые DB tests. Для isolation выбери отдельную test DB и runner configuration. Если задаче нужна HTTP/DB proof, установи применимость blocker и выполни доступную изолированную проверку. Не объявляй покрытым то, что до tests не запустилось; сохрани точный failure и оставшуюся проверку. Unit/Swagger success не заменяет e2e.

Для auth/cards DB-инвариантов используйте npm run test:sqlite: отдельная временная база на suite, migrations с RUST_LOG=info, configured HTTP и реальная Prisma. Для schema/data changes дополнительно npm run test:durability -- <baseline>. Матрица рисков и подготовка совместимой предыдущей сборки — Backend README. Эти проверки не снимают ограничение общего test:e2e автоматически.