Ir para o conteúdo principal
Versão: 30.0

Usando Matchers

Tradução Beta Não Oficial

Esta página foi traduzida por PageTurner AI (beta). Não é oficialmente endossada pelo projeto. Encontrou um erro? Reportar problema →

O Jest usa "matchers" para permitir testar valores de diferentes formas. Este documento apresentará alguns matchers comumente utilizados. Para a lista completa, consulte a documentação da API expect.

Matchers Comuns

A forma mais simples de testar um valor é através de igualdade exata.

test('two plus two is four', () => {
expect(2 + 2).toBe(4);
});

Neste código, expect(2 + 2) retorna um objeto de "expectation" (expectativa). Normalmente você não fará muito com esses objetos de expectativa, exceto chamar matchers neles. Aqui, .toBe(4) é o matcher. Quando o Jest executa, ele rastreia todos os matchers que falham para exibir mensagens de erro claras.

toBe usa Object.is para testar igualdade exata. Se precisar verificar o valor de um objeto, use toEqual:

test('object assignment', () => {
const data = {one: 1};
data['two'] = 2;
expect(data).toEqual({one: 1, two: 2});
});

toEqual verifica recursivamente cada campo de um objeto ou array.

"message": "dica"

toEqual ignora chaves de objetos com propriedades undefined, itens de array undefined, esparsidade de arrays ou incompatibilidade de tipos de objetos. Para considerar esses casos, use toStrictEqual.

Você também pode testar o oposto de um matcher usando not:

test('adding positive numbers is not zero', () => {
for (let a = 1; a < 10; a++) {
for (let b = 1; b < 10; b++) {
expect(a + b).not.toBe(0);
}
}
});

Valores Truthy/Falsy

Em testes, às vezes é necessário distinguir entre undefined, null e false, mas outras vezes não. O Jest oferece auxiliares para ser explícito sobre o que você precisa.

  • toBeNull corresponde apenas a null

  • toBeUndefined corresponde apenas a undefined

  • toBeDefined é o oposto de toBeUndefined

  • toBeTruthy corresponde a qualquer valor que uma declaração if considera verdadeiro

  • toBeFalsy corresponde a qualquer valor que uma declaração if considera falso

Por exemplo:

test('null', () => {
const n = null;
expect(n).toBeNull();
expect(n).toBeDefined();
expect(n).not.toBeUndefined();
expect(n).not.toBeTruthy();
expect(n).toBeFalsy();
});

test('zero', () => {
const z = 0;
expect(z).not.toBeNull();
expect(z).toBeDefined();
expect(z).not.toBeUndefined();
expect(z).not.toBeTruthy();
expect(z).toBeFalsy();
});

Use o matcher que corresponde com mais precisão ao comportamento desejado no seu código.

Números

A maioria das formas de comparar números possui equivalentes em matchers.

test('two plus two', () => {
const value = 2 + 2;
expect(value).toBeGreaterThan(3);
expect(value).toBeGreaterThanOrEqual(3.5);
expect(value).toBeLessThan(5);
expect(value).toBeLessThanOrEqual(4.5);

// toBe and toEqual are equivalent for numbers
expect(value).toBe(4);
expect(value).toEqual(4);
});

Para igualdade de ponto flutuante, use toBeCloseTo em vez de toEqual, pois você não quer que um teste dependa de pequenos erros de arredondamento.

test('adding floating point numbers', () => {
const value = 0.1 + 0.2;
//expect(value).toBe(0.3); This won't work because of rounding error
expect(value).toBeCloseTo(0.3); // This works.
});

Strings

Você pode verificar strings com expressões regulares usando toMatch:

test('there is no I in team', () => {
expect('team').not.toMatch(/I/);
});

test('but there is a "stop" in Christoph', () => {
expect('Christoph').toMatch(/stop/);
});

Arrays e iteráveis

Você pode verificar se um array ou iterável contém um item específico usando toContain:

const shoppingList = [
'diapers',
'kleenex',
'trash bags',
'paper towels',
'milk',
];

test('the shopping list has milk on it', () => {
expect(shoppingList).toContain('milk');
expect(new Set(shoppingList)).toContain('milk');
});

Exceções

Para testar se uma função lança um erro quando chamada, use toThrow.

function compileAndroidCode() {
throw new Error('you are using the wrong JDK!');
}

test('compiling android goes as expected', () => {
expect(() => compileAndroidCode()).toThrow();
expect(() => compileAndroidCode()).toThrow(Error);

// You can also use a string that must be contained in the error message or a regexp
expect(() => compileAndroidCode()).toThrow('you are using the wrong JDK');
expect(() => compileAndroidCode()).toThrow(/JDK/);

// Or you can match an exact error message using a regexp like below
expect(() => compileAndroidCode()).toThrow(/^you are using the wrong JDK$/); // Test fails
expect(() => compileAndroidCode()).toThrow(/^you are using the wrong JDK!$/); // Test pass
});
"message": "dica"

A função que lança a exceção precisa ser invocada dentro de uma função wrapper, caso contrário a asserção toThrow falhará.

E Mais

Esta é apenas uma amostra. Para a lista completa de matchers, consulte a documentação de referência.

Depois de conhecer os matchers disponíveis, o próximo passo é ver como o Jest permite testar código assíncrono.