Mock de rede na fronteira
Intercepte o HTTP na camada de rede para que o código real do seu cliente continue rodando.
Praticante
- api
- mocking
- determinism
Problema
Testes que chamam uma API de verdade são lentos, instáveis e falham por motivos alheios ao seu código. Mas fazer mock do seu próprio wrapper de fetch significa que o código que você mais quer testar nunca roda.
Solução
Intercepte na fronteira da rede em vez de substituir o seu cliente. Uma ferramenta como o MSW (Mock Service Worker) responde às requisições na camada de transporte, então o seu código real de fetch/axios, a serialização e o tratamento de erros rodam contra respostas determinísticas.
Defina os handlers uma vez e compartilhe entre as camadas de unidade, integração e E2E, para manter o comportamento consistente.
Trecho de código
import { http, HttpResponse } from 'msw';
import { setupServer } from 'msw/node';
const server = setupServer(
http.get('/api/users/:id', ({ params }) =>
HttpResponse.json({ id: params.id, name: 'Ada Lovelace' }),
),
);
beforeAll(() => server.listen({ onUnhandledRequest: 'error' }));
afterEach(() => server.resetHandlers());
afterAll(() => server.close());Armadilhas
- Fazer mock do seu cliente de API em vez da rede: aí o teste não prova nada sobre as requisições reais.
- Deixar requisições sem handler passarem em silêncio; use onUnhandledRequest: 'error' para pegar desvios.
- Esquecer de resetar os handlers entre os testes, vazando estado entre os casos.