Mocks e fixtures em JavaScript: como não enlouquecer nos testes

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Objetos mock e fixtures em JavaScript: seu arsenal de testes

\n\n

Imagine que você está escrevendo um módulo que envia requisições para uma API externa de clima. Você executa os testes — e eles falham porque a API está temporariamente indisponível. Ou pior: você está testando um sistema de pagamento, e cada execução debita dinheiro real do cartão. Familiar? Bem-vindo ao mundo onde objetos mock e fixtures em JavaScript se tornam seus melhores amigos.

\n\n

Neste artigo, não vamos apenas listar definições. Vamos analisar como usar mocks, stubs e fixtures para tornar os testes rápidos, confiáveis e independentes do mundo externo. Você aprenderá como enganar timers, substituir requisições HTTP e preparar dados de teste perfeitos. Vamos lá!

\n\n

Por que usar mock e fixtures? Dor e salvação

\n\n

Ao escrever testes unitários em JavaScript, você quer testar apenas um módulo. Mas o código real geralmente depende de bancos de dados, sistema de arquivos, chamadas de rede ou números aleatórios. Sem mocks, cada teste é uma loteria: pode falhar devido a um timeout de rede ou porque o servidor retornou dados incorretos.

\n\n

Objetos mock são substitutos para dependências reais. Eles simulam o comportamento dos objetos originais, mas você controla totalmente suas respostas. Fixtures são conjuntos de dados pré-preparados (por exemplo, um JSON com a resposta de uma API) que você insere nos testes. Juntos, eles fornecem um superpoder: você testa a lógica, não a infraestrutura.

\n\n

Mock vs Stub vs Spy: entendendo os termos

\n\n

Antes de escrever código, vamos organizar os termos. No ecossistema JavaScript (especialmente em Jest e Mocha), esses conceitos às vezes se misturam, mas as diferenças são importantes:

\n\n
    \n
  • Mock (mock) — objeto que substitui uma dependência real e permite definir o comportamento esperado. Você diz: "Quando o método getUser for chamado com id=5, retorne o objeto {name: 'Alice'}".
  • \n
  • Stub (stub) — versão simplificada de um mock. Ele apenas retorna dados fixos, sem verificar como foi chamado. Frequentemente usado para substituir funções que retornam valores aleatórios.
  • \n
  • Spy (espião) — um invólucro em torno de uma função real. Ele não altera seu comportamento, mas registra quantas vezes foi chamado, com quais argumentos e o que retornou. Ideal para verificar efeitos colaterais.
  • \n
\n\n

Na maioria dos frameworks modernos (Jest, Sinon.js), os mocks fazem de tudo: substituem a implementação e espionam. Mas entender a diferença ajuda a escrever testes mais significativos.

\n\n

Fixtures: como preparar dados de teste

\n\n

Fixtures em testes JavaScript são simplesmente dados que você coloca em arquivos ou variáveis separadas. Por que isso é necessário? Primeiro, para não duplicar objetos JSON de 50 linhas em cada teste. Segundo, para alterar cenários rapidamente: uma fixture para resposta de sucesso, outra para erro.

\n\n

Exemplo de uma fixture simples para testar um módulo de gerenciamento de usuários:

\n\n
// fixtures/users.js\nexport const userAlice = {\n  id: 1,\n  name: 'Alice',\n  email: 'alice@example.com',\n  role: 'admin'\n};\n\nexport const userBob = {\n  id: 2,\n  name: 'Bob',\n  email: 'bob@example.com',\n  role: 'user'\n};\n\nexport const apiResponseSuccess = {\n  status: 200,\n  data: { users: [userAlice, userBob] }\n};\n\nexport const apiResponseError = {\n  status: 500,\n  message: 'Internal Server Error'\n};\n
\n\n

Agora, nos testes, simplesmente importamos esses objetos. Isso torna o código mais limpo e permite reproduzir facilmente os casos: "E se o servidor retornar 500?".

\n\n

Mock no Jest: exemplos práticos

\n\n

Jest é o framework de teste mais popular para JavaScript. Ele está integrado no Create React App, Next.js e muitas outras ferramentas. Vamos ver como criar objetos mock no Jest.

\n\n

Mock de funções com jest.fn()

\n\n

Suponha que temos uma função que chama um callback após processar os dados

Blogs

Book Recommendations