
Projetos
Testes
Criando uma API Mockada de Usuários com Testes em Jest
Neste post, vamos criar uma API mockada de usuários usando apenas JavaScript puro, sem frameworks como Express, e testar seus endpoints com Jest. Essa prática ajuda a entender como simular comportamentos de APIs e validar as respostas esperadas.
• 16 de mai. de 2025
• 7 min de leitura

📁 Estrutura de Pastas
project-root/ ├── src/ │ └── userApi.js ├── tests/ │ └── userApi.test.js ├── package.json
Instalação e Configuração
npm init -y npm install --save-dev jest
No package.json
, adicione:
"scripts": { "test": "jest" }, "jest": { "verbose": true }
Código da API Mockada
src/userApi.js
const users = []; // Cria um novo usuário function createUser(name) { if (!name || typeof name !== "string") return { error: "Nome inválido" }; const exists = users.find((user) => user.name === name); if (exists) return { error: "Usuário já existe" }; const newUser = { id: users.length + 1, name }; users.push(newUser); return newUser; } // Retorna todos os usuários function getUsers() { return [...users]; } // Busca um usuário por nome function findUser(name) { return users.find((user) => user.name === name) || null; } // Reseta a lista (para os testes) function resetUsers() { users.length = 0; } module.exports = { createUser, getUsers, findUser, resetUsers };
Testes Automatizados
tests/userApi.test.js
const api = require("../src/userApi"); beforeEach(() => { api.resetUsers(); // Garante isolamento entre os testes }); describe("Criação de usuários", () => { test("cria um novo usuário", () => { const result = api.createUser("João"); expect(result).toEqual({ id: 1, name: "João" }); }); test("impede criação de nome inválido", () => { expect(api.createUser("")).toEqual({ error: "Nome inválido" }); expect(api.createUser(123)).toEqual({ error: "Nome inválido" }); }); test("impede duplicação de usuário", () => { api.createUser("João"); expect(api.createUser("João")).toEqual({ error: "Usuário já existe" }); }); }); describe("Leitura de usuários", () => { test("retorna lista vazia inicialmente", () => { expect(api.getUsers()).toEqual([]); }); test("retorna todos os usuários", () => { api.createUser("Ana"); api.createUser("Carlos"); expect(api.getUsers()).toEqual([ { id: 1, name: "Ana" }, { id: 2, name: "Carlos" } ]); }); test("busca um usuário por nome", () => { api.createUser("Fernanda"); expect(api.findUser("Fernanda")).toEqual({ id: 1, name: "Fernanda" }); }); test("retorna null se o usuário não for encontrado", () => { expect(api.findUser("Inexistente")).toBeNull(); }); });
Executando os Testes
npm test
Saída esperada:
PASS tests/userApi.test.js Create users √ create new user (6 ms) √ prevents the creation of an invalid name (1 ms) √ prevents user duplication Reading users √ returns an initially empty list √ returns all users √ search for a user by name (1 ms) √ returns null if the user is not found (1 ms) Test Suites: 1 passed, 1 total Tests: 7 passed, 7 total Snapshots: 0 total Time: 1.244 s Ran all test suites.
Boas Práticas com Jest
Quando desenvolvemos testes automatizados, é importante seguir algumas boas práticas que ajudam a manter o código limpo, confiável e fácil de entender:
A função beforeEach é usada para preparar o ambiente antes da execução de cada teste. No nosso caso, ela reseta a lista de usuários. Isso garante que os testes não fiquem dependentes uns dos outros. Por exemplo, se um teste adiciona um usuário, o próximo não deve ser influenciado por esse dado já existente.
A estrutura describe serve para agrupar testes relacionados. Isso melhora a organização e facilita a leitura dos relatórios de testes, pois você consegue identificar facilmente qual funcionalidade está sendo testada e onde ocorreu uma falha.
Retornar mensagens claras e objetivas é fundamental. Ao invés de retornar apenas false ou null em caso de erro, retornamos objetos com mensagens como { error: "Usuário já existe" }. Isso facilita a identificação do problema tanto nos testes quanto em uma aplicação real.
Por fim, separar as responsabilidades das funções torna o código mais modular. Por exemplo, a função createUser é responsável por adicionar um usuário, enquanto getUsers apenas retorna os dados. Isso segue o princípio da responsabilidade única e facilita tanto o teste quanto a manutenção do código.
Conclusão
Criar uma API mockada é um ótimo exercício para quem está começando com testes. Sem depender de frameworks, você foca em lógica, boas práticas e aprende a estruturar testes que garantem o comportamento correto da sua aplicação.
Tags
Projetos
Testes
Artigos Relacionados

