Pular para conteúdo

ADR-0012: Estratégia de Testes — Vitest + Playwright

Status

Accepted

Context and Problem Statement

Os projetos precisam de cobertura de testes em múltiplos níveis: unitários, integração e e2e, com execução rápida no CI.

Decision Drivers

  • Velocidade de execução no CI
  • Suporte a TypeScript nativo
  • Compatibilidade com Next.js e NestJS
  • Testes e2e confiáveis para fluxos críticos

Considered Options

  • Vitest + Playwright
  • Jest + Cypress
  • Jest + Playwright

Decision Outcome

Chosen option: Vitest (unit/integration) + Playwright (e2e), porque Vitest é significativamente mais rápido que Jest com suporte nativo a ESM/TypeScript, e Playwright é mais confiável que Cypress para testes cross-browser.

Positive Consequences

  • Vitest: watch mode rápido, compatível com Jest API (migração fácil)
  • Playwright: testes e2e paralelos, multi-browser, trace viewer para debug
  • Storybook interaction tests via @storybook/test (baseado em Vitest)
  • NestJS: Vitest substitui Jest sem mudança de API

Negative Consequences

  • Playwright requer browsers instalados no CI (GitHub Actions tem action oficial)
  • Configuração inicial do Playwright mais verbosa que Cypress

More Information

  • Unit/Integration: Vitest — atenvi-ui, atenvi-web, atenvi-web-admin, atenvi-bff
  • E2E: Playwright — atenvi-web, atenvi-web-admin
  • Storybook: @storybook/test para interaction tests em atenvi-ui
  • CI: testes unitários em PR, e2e em merge para main
  • atenvi-app (React Native + Expo): apenas unit tests por ora, sem e2e mobile (Detox/Maestro fora de escopo no MVP). Vitest não tem suporte maduro ao Metro bundler do RN — usar Jest com preset jest-expo, exceção à regra acima por limitação de ecossistema, não por preferência.

Coverage (2026-07-03)

Provider v8 (vitest --coverage / jest --coverage), métricas lines/functions/branches/statements. CI quebra se o projeto ficar abaixo do threshold.

Escopo Threshold Por quê
atenvi-bff — módulos financeiros (payment, commission, cash-closing) 90% dinheiro errado é o pior bug possível num MVP que cobra assinatura
atenvi-bff — resto 70% padrão razoável sem travar velocidade do MVP
atenvi-web / atenvi-web-admin 60% UI muda rápido no MVP; fluxos críticos cobertos por Playwright e2e, não unit
atenvi-app 60% só unit por ora, ecossistema RN ainda não maduro no projeto
atenvi-ui 70% componente sem Story não deveria existir (regra do DoD)

Excluído da métrica: *.dto.ts, *.types.ts, *.module.ts (wiring NestJS), database/migrations/, config/, *.stories.tsx, boilerplate de entry point (main.ts, layout.tsx).