Este documento estabelece as diretrizes e estratégias para implementação de testes automáticos no projeto Varion Backend, garantindo qualidade, confiabilidade e manutenibilidade do código.
- Estabelecer cobertura de testes mínima de 80%
- Implementar testes unitários, integração e E2E
- Automatizar execução de testes no CI/CD
- Garantir qualidade e confiabilidade do código
- Facilitar refatorações e manutenção
- Jest: Framework principal de testes
- ts-jest: Suporte para TypeScript
- @types/jest: Tipagens TypeScript para Jest
pnpm test # Executa todos os testes
pnpm test:watch # Executa testes em modo watch
pnpm test:coverage # Gera relatório de cobertura /\
/E2E\ <- Poucos testes (5-10%)
/____\
/ \
/Integration\ <- Testes moderados (20-30%)
\____________/
\ /
\ Unit / <- Muitos testes (60-70%)
\______/
- Services: Lógica de negócio
- Entities: Validações e métodos
- Utils: Funções auxiliares
- Schemas: Validações Zod
- Controllers: Endpoints da API
- Database: Operações com TypeORM
- Middlewares: Validações e autenticação
- Fluxos completos: Cenários de usuário
- API endpoints: Testes com Supertest
src/
├── modules/
│ └── projects/
│ ├── project.service.ts
│ ├── project.service.test.ts # ✅ Já existe
│ ├── project.controller.ts
│ ├── project.controller.test.ts # 📝 A criar
│ └── project.entity.test.ts # 📝 A criar
└── utils/
├── controllerUtils.ts
└── controllerUtils.test.ts # 📝 A criar
- Testes unitários:
*.test.ts - Testes de integração:
*.integration.test.ts - Testes E2E:
*.e2e.test.ts - Mocks:
__mocks__/ - Setup:
__tests__/setup.ts
- ✅ Configurar setup de testes
- ✅ Criar helpers e mocks básicos
- ✅ Implementar testes para utils (responseHandler)
- ✅ Definir padrões de teste
- ✅ Testes para ProjectService (exemplo implementado)
-
⚠️ Testes para StateService (schema validação OK) - 📝 Testes para CommentService
- ✅ Mocks para repositórios
- ✅ Exemplo de teste de integração implementado
-
⚠️ Testes para ProjectController (em desenvolvimento) -
⚠️ Testes para StateController (em desenvolvimento) - ✅ Setup de banco de teste (com mocks)
- ✅ Testes de integração (exemplo funcionando)
- ✅ Configurar Supertest
- 📝 Testes E2E principais
- 📝 Integração com GitHub Actions
- 📝 Relatórios de cobertura
src/utils/responseHandler.test.ts- ✅ 100% passandosrc/modules/states/state.schema.test.ts- ✅ 100% passandosrc/__tests__/examples/unit.example.test.ts- ✅ 100% passandosrc/__tests__/examples/integration.example.test.ts- ✅ 100% passando
- Problema: Testes esperavam formato antigo de resposta
- Solução: Atualizados para novo formato
{ success: true, data: ... } - Status: ✅ Todos os 10 testes passando
- Problema: Regex de validação de cor não aceitava strings vazias
- Solução: Atualizado regex para
/^(#([0-9a-fA-F]{3}){1,2}|)$/ - Status: ✅ Compatível com campo nullable no banco
- Problema: Tentativa de usar ProjectService como instância quando é static
- Solução: Refatorado para testar métodos estáticos com mocks do AppDataSource
- Status: ✅ Testes de createProject e getProjectByCode funcionando
- Problema: URLs incorretas (
/api/statesvs/states) e tentativa de conexão real com BD - Solução: Corrigidas URLs e implementados mocks do AppDataSource
- Status: ✅ Testes GET /states e POST /projects funcionando
- Testes Passando: Exemplos + utils + schemas ✅
- Cobertura: Em desenvolvimento (ainda abaixo do threshold de 70%)
- Arquitetura: Mocking strategy definida e implementada
- CI/CD: Configuração Jest funcionando localmente
- Testes para ProjectController
- Testes para StateController
- Setup de banco de teste
- Testes de integração
- Configurar Supertest
- Testes E2E principais
- Integração com GitHub Actions
- Relatórios de cobertura
pnpm add -D supertest @types/supertestpnpm add -D jest-mock-extendedpnpm add -D sqlite3 # Para testes em memória- Cobertura mínima de 80%
- Todos os testes passando
- Sem testes skipped/disabled
- Documentação atualizada
- Performance adequada
- Arrange, Act, Assert (AAA)
- Nomes descritivos
- Um assert por teste
- Cleanup adequado
- Isolamento entre testes
- Meta: 80% mínimo
- Atual: A definir após implementação
- Medição: Jest coverage reports
- Tempo máximo por suite: 30s
- Tempo total: < 5 minutos
- Paralelização: Ativada
- Flaky tests: 0%
- False positives: < 5%
- Manutenibilidade: Alta
name: Tests
on: [push, pull_request]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: '18'
- uses: pnpm/action-setup@v2
with:
version: 8
- run: pnpm install --frozen-lockfile
- run: pnpm test:coverage
- uses: codecov/codecov-action@v3Ver arquivos:
src/modules/projects/project.service.test.ts- Templates em
__tests__/templates/
- Semanal: Métricas de cobertura
- Mensal: Performance dos testes
- Trimestral: Estratégia geral
- Desenvolvedores: Escrever testes para suas features
- Tech Lead: Revisar estratégia e padrões
- QA: Validar cenários E2E
- Aprovar este documento com a equipe
- Instalar dependências adicionais necessárias
- Criar templates de teste padrão
- Implementar seguindo o plano de fases
- Configurar CI/CD para execução automática
Documento criado em: Junho 2025 Última atualização: Junho 2025 Versão: 1.0