image

Accede a bootcamps ilimitados y a más de 650 cursos

50
%OFF
Carolina Campos
Carolina Campos29/04/2025 15:56
Compartir

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 REST
  • Jest para os testes
  • Supertest para simular requisições HTTP
  • MongoDB com Mongoose 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.

image

🛠️ 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.

image

🔁 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. 🚀

Compartir
Recomendado para ti
Microsoft 50 Anos - Prompts Inteligentes
Microsoft 50 Anos - GitHub Copilot
Microsoft 50 Anos - Computação em Nuvem com Azure
Comentarios (2)
Thamires Santos
Thamires Santos - 29/04/2025 18:35

Olá Carolina, muito interessante esse TDD, estou me aventurando no mundo das APIS mas usando a linguagem JAVA e algumas outras abordagens vou dar uma olhada no seu GitHub, obrigada por compartilhar esse conhecimento!!

Augusto Junior
Augusto Junior - 29/04/2025 18:08

Muito bom o artigo Carolina, já vou até praticar baseado nele.