Using Matchers
O Jest usa "matchers" para que você possa testar valores de maneiras diferentes. Este documento dará uma introdução de algumas diretrizes de uso de "matchers". Para ter a lista completa, veja expect
API doc.
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
utiliza Object.is
para testar a igualdade extata. Se você quer checar o valor de um objeto, use toEqual
:
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
In tests, you sometimes need to distinguish between undefined
, null
, and false
, but you sometimes do not want to treat these differently. 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).toBe(0.3); Isso não vai funcionar por causa de um 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 and iterables
You can check if an array or iterable contains a particular item using 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
If you want to test whether a particular function throws an error when it's called, 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 the exact error message or a regexp
expect(() => compileAndroidCode()).toThrow('you are using the wrong JDK');
expect(() => compileAndroidCode()).toThrow(/JDK/);
});
Note: the function that throws an exception needs to be invoked within a wrapping function otherwise the
toThrow
assertion will fail.
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.