Using Matchers
Jest usa "matchers" para deixá-lo testar valores de maneiras diferentes. Há muitos "matchers" diferentes para memorizar todos eles, então este documento tentará apenas introduzir os mais úteis.
Matchers Comuns #
A maneira mais simples para testar um valor é com igualdade exata.
test('dois mais dois é quatro', () => { expect(2 + 2).toBe(4); });
Nesse código, expect(2 + 2)
retorna um objeto de "expectativa". Você normalmente não vai fazer muito com esses objetos de expectativa exceto chamada "matchers" neles. Nesse código, o .toBe(4)
é o "matcher". Quando Jest é executado, ele rastreia todos os "matchers" que falharam para que possa imprimir as mensagens de erro para você de uma forma agradável.
toBe
usa ===
para testar igualdade exata. Se você deseja verificar o valor de um objeto, use toEqual
ao invés:
test('atribuição de objeto', () => { const data = {one: 1}; data['two'] = 2; expect(data).toEqual({one: 1, two: 2}); });
toEqual
recursivamente verifica cada campo de um objeto ou array.
Você também pode testar o oposto de um "matcher":
test('adicionando números positivos não é zero', () => { for (let a = 1; a < 10; a++) { for (let b = 1; b < 10; b++) { expect(a + b).not.toBe(0); } } });
Verdade #
Em testes às vezes você precisa distinguir entre undefined
, null
e false
, mas às vezes você não quer tratar estes de maneira diferente. Jest contém auxiliares que permitem você ser explícito sobre o que quer.
toBeNull
corresponde a apenasnull
toBeUndefined
corresponde a apenasundefined
toBeDefined
é o oposto detoBeUndefined
toBeTruthy
combina com qualquer coisa que uma instruçãoif
trata como verdadeirotoBeFalsy
combina com qualquer coisa que uma instruçãoif
trata como falso
Por exemplo:
test('nulo', () => { 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(); });
Você deve usar o "matcher" que corresponde mais precisamente para o que você deseja que seu código faça.
Números #
A maioria das formas de comparar números têm "matcher" equivalentes.
test('dois mais dois', () => { const value = 2 + 2; expect(value).toBeGreaterThan(3); expect(value).toBeGreaterThanOrEqual(3.5); expect(value).toBeLessThan(5); expect(value).toBeLessThanOrEqual(4.5); // toBe e toEqual são equivalentes para números expect(value).toBe(4); expect(value).toEqual(4); });
Para igualdade de ponto flutuante, use toBeCloseTo
em vez de toEqual
, porque você não quer um teste dependa de um pequeno erro de arredondamento.
test('adicionando números de ponto flutuante', () => { const value = 0.1 + 0.2; expect(value).not.toBe(0.3); // Não é! Por causa de erro de arredondamento expect(value).toBeCloseTo(0.3); // Isso funciona. });
Strings #
Você pode verificar strings contra expressões regulares com toMatch
:
test('não existe I em team', () => { expect('team').not.toMatch(/I/); }); test('mas existe "stop" em Christoph', () => { expect('Christoph').toMatch(/stop/); });
Arrays #
Você pode verificar se um array contém um item específico usando toContain
:
const shoppingList = [ 'fraldas', 'kleenex', 'sacos de lixo', 'papel toalha', 'cerveja', ]; test('a lista de compras tem cerveja nela', () => { expect(shoppingList).toContain('cerveja'); });
Exceções #
Se você quiser testar que uma determinada função lance um erro quando é chamada, use toThrow
.
function compileAndroidCode() { throw new ConfigError('você está usando o JDK errado'); } test('compilando android segue conforme esperado', () => { expect(compileAndroidCode).toThrow(); expect(compileAndroidCode).toThrow(ConfigError); // Você pode também usar a exata mensagem de erro ou um regexp expect(compileAndroidCode).toThrow('você está usando o JDK errado'); expect(compileAndroidCode).toThrow(/JDK/); });
E muito mais #
Isto é só uma amostra. Para obter uma lista completa de "matchers", confira a documentação de referência.
Uma vez que você aprendeu sobre os "matchers" que estão disponíveis, um próximo passo é conferir como Jest permite que você teste código assíncrono.