Seu carrinho está vazio no momento!

Introdução (3 min)
Imagine uma fábrica de carros. Para garantir a qualidade do produto final, inspecionamos cada parte individualmente (motor, freios, etc.), depois verificamos se todas as partes funcionam juntas harmoniosamente e, por fim, testamos o carro completo na estrada. Testar APIs é semelhante: verificamos componentes isolados, a interação entre eles e o sistema como um todo.
Testes são essenciais para APIs modernas, pois garantem confiabilidade, facilitam a manutenção e permitem evoluções seguras. Nesta aula, você compreenderá os diferentes níveis de teste: unitário, de integração e end-to-end (E2E), e como aplicá-los em Node.js/Express.
No contexto do Node.js/Express, esses testes se integram perfeitamente ao fluxo de desenvolvimento, assegurando a qualidade da sua API desde o início.
Conceito Fundamental (7 min)
Testes unitários verificam unidades isoladas de código, como funções individuais, garantindo que cada parte funcione corretamente de forma independente. A terminologia comum inclui mocks e stubs para simular dependências externas. Imagine testar apenas o motor do carro, sem o resto do veículo.
Testes de integração avaliam a interação entre diferentes módulos ou componentes da sua API. Verificamos se as partes trabalham juntas como esperado, por exemplo, se o motor e a transmissão funcionam em sincronia. Em APIs, isso pode envolver testar a comunicação entre diferentes endpoints ou com um banco de dados.
Testes E2E (End-to-End) simulam o fluxo completo de uma requisição, desde a interface do usuário até o banco de dados e de volta. É como testar o carro completo em condições reais de uso. As ferramentas populares incluem Cypress, Puppeteer e Selenium.
Cada tipo de teste possui vantagens e desvantagens. Testes unitários são rápidos e fáceis de implementar, mas podem não capturar erros de integração. Testes E2E são mais abrangentes, porém mais lentos e complexos. A combinação estratégica dos três tipos é vital para uma cobertura de teste eficaz.
Implementação Prática (10 min)
// server.js
const express = require('express');
const app = express();
const port = 3000;
// Função a ser testada (unidade)
function somar(a, b) {
return a + b;
}
app.get('/soma', (req, res) => {
const num1 = parseInt(req.query.num1);
const num2 = parseInt(req.query.num2);
// Validação robusta dos parâmetros de entrada.
if (isNaN(num1) || isNaN(num2)) {
return res.status(400).json({ error: 'Parâmetros inválidos' });
}
const resultado = somar(num1, num2);
res.json({ resultado });
});
// Error handling para capturar exceções não tratadas
app.use((err, req, res, next) => {
console.error(err.stack);
res.status(500).json({ error: 'Erro interno do servidor' });
});
app.listen(port, () => {
console.log(Servidor rodando em http://localhost:${port});
});
// testes.js (exemplo com Jest)
const { somar } = require('./server');
describe('Testes Unitários', () => {
it('Soma dois números corretamente', () => {
expect(somar(2, 3)).toBe(5);
});
it('Lida com números negativos', () => {
expect(somar(-2, 3)).toBe(1);
});
});
Instalação das dependências (Jest)
📚 Informações da Aula
Curso: API Completo - Node.js & Express
Tempo estimado: 25 minutos
Pré-requisitos: JavaScript básico
npm install --save-dev jest
Execução dos testes
npm test
Este exemplo demonstra um teste unitário simples para a função somar. A configuração para HostGator Plano M seria idêntica, garantindo compatibilidade total. Observe o error handling robusto e a validação de entrada. Adapte o código para o seu projeto e adicione testes de integração e E2E conforme necessário.
Exercício Hands-On (5 min)
Crie um novo endpoint/subtrair que recebe dois números como parâmetros de consulta e retorna a subtração. Implemente testes unitários para verificar a funcionalidade, incluindo casos de borda como subtrair zero e lidar com números negativos.
Solução:
// Adicione o endpoint /subtrair no server.js
// ... código anterior ...
function subtrair(a, b) {
return a - b;
}
app.get('/subtrair', (req, res) => {
// ... (implementação similar ao /soma, com validação e error handling)
});
// ... resto do código ...
// Adicione os testes unitários no testes.js
// ... código anterior ...
describe('Testes Unitários para Subtração', () => {
it('Subtrai dois números corretamente', () => {
expect(subtrair(5, 2)).toBe(3);
});
it('Lida com subtração por zero', () => {
expect(subtrair(5, 0)).toBe(5);
});
it('Lida com números negativos', () => {
expect(subtrair(2, 5)).toBe(-3);
});
});
Para testar, execute npm test. Para troubleshooting, verifique o console para mensagens de erro. Próximos passos: explore frameworks de teste como Supertest para testes de integração e Cypress para testes E2E. Continue praticando e aprofundando seus conhecimentos em testes para construir APIs robustas e confiáveis.
🚀 Pronto para a próxima aula?
Continue sua jornada no desenvolvimento de APIs e domine Node.js & Express!