Pular para o conteúdo principal

Estratégia de testes

Pirâmide

CamadaOndeComandoPapel
Unitáriossrc/**/*.spec.tsnpm run testServiços, mappers, DTOs, JWT strategy, utils
Coberturacoverage/ (lcov)npm run test:covCI faz upload do artefact; Sonar lê coverage/lcov.info
e2etest/*.e2e-spec.tsnpm run test:e2eHTTP real (Jest test/jest-e2e.json)
MutaçãoStrykernpm run test:mutationQualidade dos unitários; CI continue-on-error
Contrato vivoSwagger + Postmanmanual / localNão substitui Jest

Não há suite de carga no repositório. Presença multi-pod não está coberta (mapa in-memory).

Configuração

O que testar por tipo de mudança

MudançaMínimo esperado
Novo endpointDTO spec + serviço; documentar no catálogo; Swagger annotations
Auth / @Public / tenantspec do guard/strategy e caso e2e 401/403
Mapper / query SQLspec com fixtures; 409 CNPJ / 404 tenant
Operacional (datas, APPR)spec do range e agregações
Só docssem teste de código

Como correr

npm run test
npm run test:watch
npm run test:cov
npm run test:e2e
npm run test:debug
npm run test:mutation

CI (.github/workflows/ci.yml): test:cov é obrigatório; mutação e Sonar não falham o pipeline (continue-on-error no Sonar/Stryker).

Cobertura alvo

Não há gate rígido no Jest. Prática da casa:

  • Código novo em application/ e presentation/dto deve entrar com spec.
  • Não baixar cobertura nas pastas que já têm testes (company, auth-login, password-reset, external-apis).
  • Stryker break 50 é o chão; não o trate como objectivo.

Dados e isolamento

  • Specs não devem apontar a BD real de staging. Use mocks de repositório / TestingModule.
  • e2e que precisem de Postgres devem usar env de teste (.env.test está no .gitignore) — não commits de connection strings.
  • Payloads: e-mails e CNPJs fictícios.