Skip to content

Latest commit

 

History

History
269 lines (214 loc) · 7.73 KB

File metadata and controls

269 lines (214 loc) · 7.73 KB

Documento de Revisão Técnica - Implementação de Testes Automáticos

📋 Visão Geral

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.

🎯 Objetivos

  • 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

🔧 Stack de Testes Atual

Ferramentas Configuradas

  • Jest: Framework principal de testes
  • ts-jest: Suporte para TypeScript
  • @types/jest: Tipagens TypeScript para Jest

Scripts Disponíveis

pnpm test              # Executa todos os testes
pnpm test:watch        # Executa testes em modo watch
pnpm test:coverage     # Gera relatório de cobertura

📊 Estratégia de Testes

1. Pirâmide de Testes

    /\
   /E2E\     <- Poucos testes (5-10%)
  /____\
 /      \
/Integration\ <- Testes moderados (20-30%)
\____________/
 \          /
  \  Unit  /  <- Muitos testes (60-70%)
   \______/

2. Tipos de Testes a Implementar

2.1 Testes Unitários (60-70%)

  • Services: Lógica de negócio
  • Entities: Validações e métodos
  • Utils: Funções auxiliares
  • Schemas: Validações Zod

2.2 Testes de Integração (20-30%)

  • Controllers: Endpoints da API
  • Database: Operações com TypeORM
  • Middlewares: Validações e autenticação

2.3 Testes E2E (5-10%)

  • Fluxos completos: Cenários de usuário
  • API endpoints: Testes com Supertest

🏗️ Estrutura de Testes

Organização de Arquivos

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

Convenções de Nomenclatura

  • Testes unitários: *.test.ts
  • Testes de integração: *.integration.test.ts
  • Testes E2E: *.e2e.test.ts
  • Mocks: __mocks__/
  • Setup: __tests__/setup.ts

📝 Plano de Implementação

Fase 1: Fundação (Semana 1-2) ✅ CONCLUÍDA

  • ✅ Configurar setup de testes
  • ✅ Criar helpers e mocks básicos
  • ✅ Implementar testes para utils (responseHandler)
  • ✅ Definir padrões de teste

Fase 2: Services (Semana 3-4) 🔄 EM PROGRESSO

  • ✅ Testes para ProjectService (exemplo implementado)
  • ⚠️ Testes para StateService (schema validação OK)
  • 📝 Testes para CommentService
  • ✅ Mocks para repositórios

Fase 3: Controllers (Semana 5-6) 🔄 EM PROGRESSO

  • ✅ 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)

Fase 4: E2E e CI/CD (Semana 7-8) 📋 PLANEJADA

  • ✅ Configurar Supertest
  • 📝 Testes E2E principais
  • 📝 Integração com GitHub Actions
  • 📝 Relatórios de cobertura

📊 Status Atual de Testes (Dezembro 2024)

✅ Arquivos de Teste Funcionando

  • src/utils/responseHandler.test.ts - ✅ 100% passando
  • src/modules/states/state.schema.test.ts - ✅ 100% passando
  • src/__tests__/examples/unit.example.test.ts - ✅ 100% passando
  • src/__tests__/examples/integration.example.test.ts - ✅ 100% passando

⚠️ Principais Correções Realizadas

1. ResponseHandler Tests

  • Problema: Testes esperavam formato antigo de resposta
  • Solução: Atualizados para novo formato { success: true, data: ... }
  • Status: ✅ Todos os 10 testes passando

2. State Schema Validation

  • 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

3. Unit Example Tests

  • 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

4. Integration Example Tests

  • Problema: URLs incorretas (/api/states vs /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

📈 Métricas Atuais

  • 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

Fase 4: E2E e CI/CD (Semana 7-8)

  • Configurar Supertest
  • Testes E2E principais
  • Integração com GitHub Actions
  • Relatórios de cobertura

🛠️ Ferramentas Adicionais Recomendadas

Para Testes de API

pnpm add -D supertest @types/supertest

Para Mocking Avançado

pnpm add -D jest-mock-extended

Para Testes de Banco

pnpm add -D sqlite3 # Para testes em memória

📋 Checklist de Qualidade

Antes de Mergear

  • Cobertura mínima de 80%
  • Todos os testes passando
  • Sem testes skipped/disabled
  • Documentação atualizada
  • Performance adequada

Padrões de Teste

  • Arrange, Act, Assert (AAA)
  • Nomes descritivos
  • Um assert por teste
  • Cleanup adequado
  • Isolamento entre testes

🎯 Métricas e KPIs

Cobertura de Código

  • Meta: 80% mínimo
  • Atual: A definir após implementação
  • Medição: Jest coverage reports

Performance

  • Tempo máximo por suite: 30s
  • Tempo total: < 5 minutos
  • Paralelização: Ativada

Qualidade

  • Flaky tests: 0%
  • False positives: < 5%
  • Manutenibilidade: Alta

🚀 Automação CI/CD

GitHub Actions Workflow

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@v3

📚 Recursos e Documentação

Links Úteis

Exemplos de Teste

Ver arquivos:

  • src/modules/projects/project.service.test.ts
  • Templates em __tests__/templates/

🔄 Revisão e Manutenção

Frequência de Revisão

  • Semanal: Métricas de cobertura
  • Mensal: Performance dos testes
  • Trimestral: Estratégia geral

Responsabilidades

  • Desenvolvedores: Escrever testes para suas features
  • Tech Lead: Revisar estratégia e padrões
  • QA: Validar cenários E2E

📝 Próximos Passos

  1. Aprovar este documento com a equipe
  2. Instalar dependências adicionais necessárias
  3. Criar templates de teste padrão
  4. Implementar seguindo o plano de fases
  5. Configurar CI/CD para execução automática

Documento criado em: Junho 2025 Última atualização: Junho 2025 Versão: 1.0