TDD na prática: construindo uma API REST com Node.js e testes automatizados
- #Jest
- #Node.js
- #Mongoose
- #Express
- #MongoDB
Esse projeto foi uma adaptação de uma aula da DIO (Digital Innovation One), onde a proposta era construir uma API utilizando Python, FastAPI, Pydantic, Pytest e MongoDB — tudo com foco em aplicar o TDD (Test-Driven Development) na prática.
Decidi então recriar o projeto em Node.js, utilizando Express, Jest e Supertest, mantendo o mesmo objetivo de estruturar uma API com testes desde o início.
🚀 Repositório no GitHub: github.com/CarolinaCamposs/TDD-Store-API-JS
🧠 O que é TDD?
TDD (Desenvolvimento Orientado por Testes) é uma abordagem onde primeiro escrevemos testes automatizados — que falham — para depois implementar o código necessário para fazê-los passar. O ciclo se baseia em três etapas:
- Red: Escreva um teste que falhe.
- Green: Implemente o mínimo para passar no teste.
- Refactor: Refatore o código com confiança, já que os testes garantem que tudo continua funcionando.
🏗️ A estrutura do projeto
Node.js
+Express
para criar a API RESTJest
para os testesSupertest
para simular requisições HTTPMongoDB
comMongoose
para persistência dos dados
✍️ Escrevendo o primeiro teste
Antes mesmo de criar a rota, escrevi o seguinte teste para criar um produto:
describe('Product Routes', () => {
it('should create a new product', async () => {
const response = await request(app)
.post('/products')
.send({ name: 'Produto Teste 2', price: 29.99 });
expect(response.status).toBe(201);
expect(response.body).toHaveProperty('_id');
});
🔴 Como esperado, o teste falhou com erro 404, porque a rota ainda não existia.
🛠️ Implementando a rota
Com base no teste, implementei a rota e o controller responsável por criar um novo produto. Depois disso, rodei novamente os testes e...
async function createProduct(req, res) {
try {
const { name, price } = req.body;
const product = await Product.create({ name, price });
return res.status(201).json(product);
} catch (error) {
return res.status(500).json({ error: 'Erro ao criar produto' });
}
}
✅ Tudo passou!
Esse é o coração do TDD: garantir que cada funcionalidade já nasce testada e validada.
🔁 Evoluindo com testes para listagem, atualização e exclusão
Seguindo o mesmo processo, escrevi testes para:
- Listar todos os produtos
- Atualizar nome e preço de um produto
- Excluir um produto por ID
Cada funcionalidade foi guiada pelos testes e implementada apenas quando necessária, mantendo o projeto enxuto e bem testado desde o início.
📦 Repositório no GitHub
Todo o código está disponível aqui:
🔗 github.com/CarolinaCamposs/TDD-Store-API-JS
🤔 Por que TDD vale a pena?
- Você escreve código mais seguro e focado
- Ajuda a entender os requisitos antes de começar
- Reduz retrabalho
- Facilita a refatoração
💬 Vamos trocar ideia?
Você já aplicou TDD em algum projeto? Está aprendendo ou tem vontade de começar?
Me conta aqui nos comentários!
Vamos aprender e evoluir juntos. 🚀