Unit tests ruins são pior que nenhum teste. Aprenda princípios que criam testes valiosos, rápidos e maintainables.
Conceitos Principais
AAA Pattern
Arrange: setup. Act: executa código. Assert: verifica resultado. Estrutura clara, legível.
FIRST Principles
Fast: < 100ms. Independent: não dependem de ordem. Repeatable: mesmo resultado sempre. Self-Validating: pass/fail claro. Timely: escrito junto com código.
One Assert
Teste uma coisa. Falha clara. Exceção: assert múltiplos atributos de um objeto.
Mocking Strategy
Mock apenas boundaries (DB, HTTP). Não mock lógica de negócio. Test doubles: mock, stub, spy, fake.
Passo a Passo
- Estruture com AAA: // Arrange
const user = { name: "John" };
// Act
const result = formatUser(user);
// Assert
expect(result).toBe("John"); - Descreva Comportamento: Não: test("getUserById"). Sim: test("getUserById returns user when exists"). Descrição clara do comportamento.
- Mock Boundaries: Mock fetch, DB queries. Não mock funções puras. Stub retornos. Spy chamadas.
- Teste Edge Cases: Null, undefined, empty, max values. Error cases. Boundary conditions. Não apenas happy path.
- Coverage Inteligente: 100% coverage ≠ testes bons. Foque em lógica crítica. Ignore getters/setters simples. Quality > quantity.
Boas Praticas
Recomendacoes
• AAA pattern sempre
• Descrições claras de comportamento
• Testes independentes (não compartilham state)
• Mock apenas I/O externo
• Rápidos (< 100ms cada)
• Um conceito por teste
• Teste comportamento, não implementação
• Evite lógica em testes
• Setup com beforeEach quando comum
• Cleanup com afterEach
• Edge cases e errors
• Determinísticos (sem random)
• Legíveis como documentação
• CI roda todos os testes
• Coverage > 80% de código crítico
Erros Comuns
Evite estes erros
• Testar métodos privados
• Múltiplos conceitos em um teste
• Testes dependentes de ordem
• Mock de tudo
• Assertions vagos (toBeTruthy)
• Não testar edge cases
Checklist
- AAA pattern aplicado
- Descrições comportamentais
- Mocks apenas em boundaries
- Edge cases testados
- Testes < 100ms
- Coverage > 80%
- CI executando testes