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/testpara interaction tests ematenvi-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 presetjest-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).