Jest

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

Imagem que representa os Matchers do Jest

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():

function erro() {
  throw new Error('Erro inesperado!');
}

expect(erro).toThrow();
expect(erro).toThrow('Erro inesperado');

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(); // Passa
expect(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

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

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.