Using Matchers
Jest uses "matchers" to let you test values in different ways. This document will introduce some commonly used matchers. For the full list, see the expect
API doc.
Marcadores más comunes
El camino más simple para comprobar un valor es con una igualdad.
test('dos mas dos son cuatro', () => {
expect(2 + 2).toBe(4);
});
Este código, expect (2 + 2)
devuelve un objeto de "expectativa". Típicamente no hará mucho con esos objetos de tipo expectations, excepto llamar a matchers en ellos. Este código, .toBe(4)
es el matcher. Cuando Jest es ejecutado, este sigue la huella de los matchers así que puede imprimir un mensaje de error más agradable.
toBe
uses Object.is
to test exact equality. If you want to check the value of an object, use toEqual
instead:
test('asignacion de objeto', () => {
const data = {uno: 1};
data['dos'] = 2;
expect(data).toEqual({uno: 1, dos: 2});
});
toEqual
verifica recursivamente cada campo de un objeto o un arreglo.
También puedes comprobar lo contrario de que espera el matcher:
test('agregando un numero positivo que no sea 0', () => {
for (let a = 1; a < 10; a++) {
for (let b = 1; b < 10; b++) {
expect(a + b).not.toBe(0);
}
}
});
Veracidad
In tests, you sometimes need to distinguish between undefined
, null
, and false
, but you sometimes do not want to treat these differently. Jest contiene helpers que te permitirán ser explícito acerca de lo que deseas.
toBeNull
coincide solo connull
toBeUndefined
coincide solo conundefined
toBeDefined
es el opuesto atoBeUndefined
toBeTruthy
coincide con lo que sea que el condicionalif
devuelva como truetoBeFalsy
coincide con lo que sea que el condicionalif
devuelva como false
Por ejemplo:
test('null', () => {
const n = null;
expect(n).toBeNull();
expect(n).toBeDefined();
expect(n).not.toBeUndefined();
expect(n).not.toBeTruthy();
expect(n).toBeFalsy();
});
test('cero', () => {
const z = 0;
expect(z).not.toBeNull();
expect(z).toBeDefined();
expect(z).not.toBeUndefined();
expect(z).not.toBeTruthy();
expect(z).toBeFalsy();
});
Deberías usar el matcher que corresponda de manera mas precisa a lo que su código quiera que haga.
Números
Existen múltiples matchers equivalentes para la comprobación de números.
test('dos mas dos', () => {
const value = 2 + 2;
expect(value).toBeGreaterThan(3);
expect(value).toBeGreaterThanOrEqual(3.5);
expect(value).toBeLessThan(5);
expect(value).toBeLessThanOrEqual(4.5);
// toBe y toEqual son equivalentes para números
expect(value).toBe(4);
expect(value).toEqual(4);
});
Para igualdad de punto flotante, use toBeCloseTo
en lugar de toEqual
, esto por que no quisiera depender de un pequeño error de redondeo.
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
Puede probar cadenas contra expresiones regulares con toMatch
:
test('no hay I en Team', () => {
expect('team').not.toMatch(/I/);
});
test('hay "stop" en 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');
});
Excepciones
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.
Hay más
Esto es sólo un ejemplo. Para una lista completa de matchers, véase los documentos de referencia reference docs.
Una vez que haya aprendido sobre los matchers que están disponibles, como recomendación, verifique test asynchronous code.