Olá, Luidi.
O fluxo ideal de testes pode variar conforme a abordagem do time e a complexidade do projeto, mas uma sequência recomendada é:
- Criar o Schema e escrever um teste unitário para validar sua estrutura e regras.
- Criar as rotas e escrever testes de integração para verificar se elas estão funcionando corretamente.
- Criar os controllers e escrever testes para as funções individuais.
O fluxo de commits pode seguir esta estrutura:
- Criar o Schema → Criar o teste unitário → Commit
- Criar as rotas → Criar testes de integração → Commit
- Criar os controllers → Criar testes unitários para cada função → Commit
- Criar os testes end-to-end (E2E) para garantir que tudo funciona junto → Commit
Os principais arquivos que devem ter testes são:
- Schemas (testes unitários para validação de dados)
- Controllers (testes unitários para cada função)
- Rotas (testes de integração para garantir o fluxo da API)
- Serviços (caso tenha lógica separada em serviços, testar individualmente)
Veja um exemplo de teste unitário para um Schema com Jest e Joi:
const Joi = require('joi');
const schema = Joi.object({
nome: Joi.string().required(),
idade: Joi.number().integer().min(18).required(),
});
test('Validação do Schema', () => {
const resultado = schema.validate({ nome: 'Luidi', idade: 25 });
expect(resultado.error).toBeUndefined();
});
E um exemplo de teste de integração para uma rota com Supertest:
const request = require('supertest');
const app = require('../app'); // Importando a aplicação Express
test('GET /usuarios deve retornar lista de usuários', async () => {
const resposta = await request(app).get('/usuarios');
expect(resposta.status).toBe(200);
expect(resposta.body).toBeInstanceOf(Array);
});
Seguindo essa abordagem, você garante que cada parte do código está funcionando antes de seguir para a próxima etapa.
Fico à disposição. Abraços e bons estudos.