Skip to main content
Version: 27.2

Utilizando Comparadores

Jest utiliza "matchers" para permitirte probar valores de diferentes maneras. Este documento introducirá algunos matchers comúnmente usados. Para la lista completa, vea el documento expect API.

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 con null
  • toBeUndefined coincide solo con undefined
  • toBeDefinedes el opuesto a toBeUndefined
  • toBeTruthy coincide con lo que sea que el condicional if devuelva como true
  • toBeFalsy coincide con lo que sea que el condicional if 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/);
});

Arreglos e iterables#

Puedes comprobar si un array o iterable contiene un elemento en particular 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');
});

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/);
});

Nota: la función que arroja una excepción necesita ser invocada dentro de una función de envoltorio, de lo contrario la afirmación toThrow fallará.

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.