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

Criando uma API Mockada de Usuários com Testes em Jest

📁 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

Imagem sobre o React
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
Imagem sobre o React
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.

16 de mai. de 20254 min de leitura

Blog DevTest

Conteúdo técnico Sobre React, Jest e testes modernos para desenvolvedores de todos os níveis

© 2025

DevTrail. Todos os direitos reservados.