Seu carrinho está vazio no momento!

Introdução (3 min)
Imagine um dublê de cinema. Ele substitui o ator em cenas perigosas, simulando a realidade sem os riscos. No desenvolvimento de software, o mocking faz o mesmo: simula componentes externos, como APIs e bancos de dados, permitindo testes isolados e previsíveis. Esta prática é estratégica para APIs modernas, garantindo a qualidade do código e acelerando o desenvolvimento. Nesta aula, vamos construir um exemplo prático de mocking com jest.mock() e nock, focando em requisições HTTP em um ambiente Node.js/Express.
Conceito Fundamental (7 min)
Mocking, em termos técnicos, é a substituição de um componente real por uma versão simulada que imita seu comportamento. Isso isola o código em teste, removendo dependências externas e garantindo resultados consistentes. Imagine testar uma função que depende de uma API de previsão do tempo. Usar a API real tornaria o teste imprevisível, pois o clima muda. Com mocking, simulamos a resposta da API, controlando o resultado do teste. Este conceito se integra com frameworks de teste como Jest e bibliotecas como Nock.
- Casos de uso: Testes unitários e de integração, desenvolvimento com APIs externas indisponíveis, simulação de diferentes cenários de resposta.
- Vantagens: Testes mais rápidos, confiáveis e isolados; desenvolvimento independente de serviços externos.
- Desvantagens: Pode criar uma falsa sensação de segurança se o mock não representar fielmente o componente real; exige manutenção dos mocks.
Implementação Prática (10 min)
Vamos implementar um exemplo que busca dados de um usuário de uma API externa e os exibe. Usaremos nock para simular a requisição HTTP e jest.mock() para simular um módulo interno.
// users.js
const axios = require('axios');
const getUser = async (id) => {
try {
const response = await axios.get(https://jsonplaceholder.typicode.com/users/${id});
return response.data;
} catch (error) {
console.error('Erro ao buscar usuário:', error); // Logging robusto
throw error; // Repropagando o erro para tratamento externo
}
};
module.exports = { getUser };
// users.test.js
const axios = require('axios');
const { getUser } = require('./users');
const nock = require('nock');
jest.mock('axios'); // Mock do módulo axios
describe('getUser', () => {
it('deve retornar os dados do usuário com sucesso', async () => {
const userData = { id: 1, name: 'Leanne Graham' };
nock('https://jsonplaceholder.typicode.com') // Simula a requisição HTTP
.get('/users/1')
.reply(200, userData);
axios.get.mockResolvedValue({ data: userData }); // Define o retorno do mock do axios
const user = await getUser(1);
expect(user).toEqual(userData);
});
it('deve lidar com erros da API', async () => {
nock('https://jsonplaceholder.typicode.com')
.get('/users/2')
.reply(500, 'Erro interno do servidor');
axios.get.mockRejectedValue(new Error('Erro interno do servidor')); // Simula rejeição
await expect(getUser(2)).rejects.toThrow('Erro interno do servidor');
});
});
Instalação das dependências (uma única vez)
📚 Informações da Aula
Curso: API Completo - Node.js & Express
Tempo estimado: 25 minutos
Pré-requisitos: JavaScript básico
npm install axios jest nock
Execução dos testes
npm test
Adaptações para HostGator Plano M seriam referentes à configuração do ambiente Node.js e gerenciamento de dependências, que são similares a qualquer outro ambiente Linux. Assegure-se de ter Node.js e npm instalados e configurados corretamente.
Exercício Hands-On (5 min)
Modifique o código para buscar um post do usuário (endpoint /posts) usando o mesmo ID do usuário. Simule a resposta da API com nock e teste o novo comportamento.
Solução:
Adicione uma nova função getUserPost(userId) que utilize axios.get() para acessar o endpoint /posts com o userId fornecido. Em seguida, crie um novo teste que simule a resposta deste endpoint com nock e verifique se o resultado é o esperado. Certifique-se de lidar com possíveis erros. A lógica de mocking e tratamento de erros permanece a mesma.
Próximos passos: Explore outras bibliotecas de mocking como sinon.js e aprofunde-se nos recursos avançados do Jest para testes mais complexos.
🚀 Pronto para a próxima aula?
Continue sua jornada no desenvolvimento de APIs e domine Node.js & Express!