Seu carrinho está vazio no momento!

Introdução (3 min)
Imagine uma orquestra. Cada músico é excelente individualmente, mas se não tocarem em harmonia, o resultado será um desastre. Em desenvolvimento de software, testes de integração são o maestro que garante a sinergia entre diferentes partes do nosso sistema, especialmente em APIs. Em APIs modernas, onde diferentes serviços interagem constantemente, testes de integração são absolutamente vitais para garantir o funcionamento coeso e confiável de todo o ecossistema. Nesta aula, construiremos testes de integração para uma API Node.js/Express usando o Supertest, uma biblioteca popular e poderosa.
Conceito Fundamental (7 min)
Teste de integração verifica a interação entre diferentes componentes ou módulos de um sistema. Em APIs, isso significa testar a comunicação entre diferentes endpoints, ou entre a API e outros serviços externos como bancos de dados. Diferente dos testes unitários, que isolam componentes individualmente, testes de integração validam o fluxo de dados e o comportamento do sistema como um todo. Em cenários de produção, eles asseguram que modificações em uma parte do sistema não afetem outras inadvertidamente.
O Supertest facilita a realização de testes de integração em APIs construídas com Express.js. Ele possibilita simular requisições HTTP (GET, POST, PUT, DELETE, etc.) para a sua API e verificar as respostas, incluindo códigos de status, cabeçalhos e corpo da resposta. Uma das suas principais vantagens é a simplicidade de uso, integrando-se perfeitamente com frameworks de teste como o Jest. A desvantagem é que, por natureza, ele demanda mais recursos que testes unitários, já que envolve múltiplos componentes.
Implementação Prática (10 min)
Vamos implementar testes de integração para um endpoint simples que retorna uma lista de usuários:
// server.js
const express = require('express');
const app = express();
const port = 3000;
const users = [
{ id: 1, name: 'João' },
{ id: 2, name: 'Maria' },
];
app.get('/users', (req, res) => {
res.json(users);
});
const server = app.listen(port, () => {
console.log(Servidor rodando em http://localhost:${port});
});
module.exports = server; // Exportando o servidor para os testes
// test/users.test.js
const request = require('supertest');
const server = require('../server'); // Importando o servidor
afterAll(() => {
server.close(); // Fechando o servidor após os testes
});
describe('GET /users', () => {
it('deve retornar uma lista de usuários', async () => {
const res = await request(server).get('/users');
expect(res.status).toBe(200);
expect(res.body).toEqual(users);
});
it('deve retornar status 404 para rotas inexistentes', async () => {
const res = await request(server).get('/users/inexistente');
expect(res.status).toBe(404);
})
});
npm install express supertest jest --save-dev
// Adicione ao seu package.json
"scripts": {
"test": "jest"
},
npm test
Note a exportação do servidor em server.js, permitindo o acesso pelo Supertest em users.test.js. A função afterAll garante que o servidor seja fechado após os testes, liberando a porta. Configuramos dois testes: um verifica o retorno correto da lista de usuários e outro testa o tratamento de rotas inexistentes, garantindo um error handling robusto. A compatibilidade com HostGator Plano M é assegurada pela utilização de práticas padrão do Node.js e Express.js.
Exercício Hands-On (5 min)
Implemente um endpoint /users/:id que retorna um usuário específico pelo ID. Em seguida, crie testes de integração usando o Supertest para verificar:
- Retorno correto do usuário com ID válido.
- Retorno de status 404 para ID inexistente.
Solução:
// server.js (adição)
app.get('/users/:id', (req, res) => {
const user = users.find(u => u.id === parseInt(req.params.id));
if (user) {
res.json(user);
} else {
res.status(404).json({ message: 'Usuário não encontrado' });
}
});
// test/users.test.js (adição)
it('deve retornar um usuário pelo ID', async () => {
const res = await request(server).get('/users/1');
expect(res.status).toBe(200);
expect(res.body).toEqual(users[0]);
});
it('deve retornar 404 para usuário inexistente', async () => {
const res = await request(server).get('/users/99');
expect(res.status).toBe(404);
expect(res.body).toEqual({ message: 'Usuário não encontrado' });
});
Para testar, execute npm test novamente. Caso encontre erros, verifique a sintaxe do código e a configuração do Jest. Explore a documentação do Supertest para aprofundar seus conhecimentos e implementar testes ainda mais robustos.
🚀 Pronto para a próxima aula?
Continue sua jornada no desenvolvimento de APIs e domine Node.js & Express!