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.
const users =[];// Cria um novo usuáriofunctioncreateUser(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áriosfunctiongetUsers(){return[...users];}// Busca um usuário por nomefunctionfindUser(name){return users.find((user)=> user.name=== name)||null;}// Reseta a lista (para os testes)functionresetUsers(){ 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
npmtest
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
Projetos
Testes
Validador de CPF com Jest: Mockando uma API e Testando na Prática
Testar código com Jest vai além de verificar se uma função retorna o valor esperado. Podemos simular APIs, validar dados reais e garantir que nosso código funciona mesmo com entradas externas. Neste post, vamos criar um exemplo prático: **uma API falsa que retorna CPFs** e uma função que valida se esse CPF é verdadeiro. Tudo isso com testes automatizados.
16 de mai. de 20257 min de leitura
Projetos
Testes
Projeto ToDoList com Jest
Neste artigo, vamos criar e testar uma ToDoList simples utilizando o framework Jest. O foco será construir funções robustas com feedback claro e realizar testes automatizados para garantir que tudo funcione como esperado.