Matchers do Jest: Dominando as Comparações nos Testes
O Jest é uma ferramenta poderosa de testes para JavaScript, e uma das partes mais importantes do seu uso são os matchers — funções que comparam valores esperados com os valores reais do código testado.
Neste post, vamos explorar os matchers mais usados, os matchers para erros e exceções, e até como criar seus próprios matchers personalizados. Bora testar com estilo?
• 07 de mai. de 2025
• 7 min de leitura
Matchers Comuns
Esses são os matchers que você mais vai usar no dia a dia:
-.toBe()//Usa `===` para comparar valores primitivos. expect(1+1).toBe(2);-.toEqual()//Compara objetos e arrays profundamente. expect({nome:'Ana'}).toEqual({nome:'Ana'});-.toContain()//Verifica se um item está presente em um array ou string. expect(['JS','Jest']).toContain('Jest');expect('Testando').toContain('ando');-.toHaveLength()//.Testa o tamanho de arrays, strings ou objetos com propriedade `.length`. expect([1,2,3]).toHaveLength(3);-.toBeTruthy()` / `.toBeFalsy()//Verifica se um valor é avaliado como verdadeiro ou falso. expect(true).toBeTruthy();expect(0).toBeFalsy();
🚨 Matchers para Erros e Exceções
Quando esperamos que uma função lance um erro, usamos o .toThrow():
Esse matcher é muito útil para testar funções que precisam tratar exceções corretamente.
✨ Criando Matchers Customizados
Os matchers são funções que o Jest usa para comparar o valor retornado pelo seu código com o valor esperado. Por padrão, o Jest oferece vários, como .toBe(), .toEqual(), etc.
Mas às vezes, você quer escrever um teste que faz uma verificação bem específica — por exemplo, testar se um número é par, se um texto está em formato de e-mail, ou se um objeto representa um usuário válido. É aí que entram os matchers customizados.
Como criar?
O Jest oferece a função expect.extend(), que você usa para registrar novos matchers.
Aqui está o exemplo com comentários:
expect.extend({toBeEven(received){const pass = received %2===0;if(pass){return{message:()=>`Esperava que ${received} não fosse par`,pass:true,};}else{return{message:()=>`Esperava que ${received} fosse par`,pass:false,};}},});// Uso:expect(4).toBeEven();// Passaexpect(5).toBeEven();// Falha
Por que criar seus próprios matchers?
Criar matchers customizados no Jest não é apenas um recurso "avançado" — é uma forma de deixar seus testes mais legíveis, reutilizáveis e fáceis de manter.
🔹 Clareza nos testes
Quando você escreve um teste como:
expect(valor %2===0).toBe(true);
Ele funciona, mas não é tão legível, especialmente para quem está lendo o teste pela primeira vez. Já com um matcher customizado, como:
expect(valor).toBeEven();
o teste parece quase uma frase natural — direto ao ponto, sem lógica exposta no teste. Isso melhora a compreensão do propósito do teste, tanto para você quanto para quem revisa seu código.
🔹 Evita duplicação de lógica
Imagine que você precisa testar se números são pares em vários testes diferentes. Em vez de escrever a mesma condição repetidamente (valor % 2 === 0), você escreve isso uma única vez dentro do matcher, e depois apenas o utiliza onde for necessário. Assim, se a regra mudar (por exemplo, aceitar somente números pares positivos), você altera a lógica em um lugar só.
🔹 Mensagens de erro mais úteis
Com matchers personalizados, você pode definir mensagens específicas para falhas, o que ajuda bastante na hora de depurar testes que quebraram.
Compare:
expect(valor %2===0).toBe(true);// Falha: Expected value to be true, received false
Com:
expect(valor).toBeEven();// Falha: Esperava que 5 fosse par
No segundo exemplo, a mensagem já diz exatamente o que aconteceu, sem você precisar interpretar a lógica do teste.
Dica: use matchers customizados quando…
Você repete muito a mesma verificação em diferentes testes.
A condição testada é um pouco mais complexa do que o comum.
Você quer que seus testes fiquem mais legíveis, como se fossem frases.
Você está escrevendo testes para regras de negócio específicas (ex: “usuário válido”, “transação aprovada”, etc).
Tags
Jest
Artigos Relacionados
Jest
Test Driven Development (TDD) com Jest
Test Driven Development, mais conhecido como TDD, é uma abordagem de desenvolvimento de software onde os testes são escritos antes do código de produção. O objetivo principal do TDD é garantir que cada parte do sistema seja testada de forma automatizada, tornando o processo de desenvolvimento mais seguro, previsível e de alta qualidade.
22 de mai. de 20258 min de leitura
Jest
Debugging com Jest: Guia Completo para Solucionar Testes Falhando
Testes falhando são comuns durante o desenvolvimento de software, e depurá-los rapidamente é essencial para produtividade. Neste guia, você vai aprender como utilizar o Chrome DevTools para depurar testes Jest e descobrirá as melhores práticas para resolver problemas comuns de forma eficiente.
20 de mai. de 20255 min de leitura
Jest
Cobertura de Testes com Jest (--coverage)
A cobertura de testes, ou coverage, é uma métrica que mede o quanto do seu código está sendo testado por testes automatizados. Quando você executa testes com Jest utilizando a flag --coverage, ele gera um relatório detalhado que mostra quais partes do seu código estão ou não sendo testadas. Entender esse relatório é fundamental para garantir a qualidade e a segurança da sua aplicação.
16 de mai. de 20256 min de leitura
Jest
Testando Código Assíncrono com Jest
É comum em JavaScript executar código de forma assíncrona. Quando você tiver código assíncrono, o Jest precisa saber quando ele foi concluído para então seguir com os testes seguintes. Felizmente, o Jest oferece várias formas de lidar com isso.