Skip to main content
Version: 27.0

Utilizando Comparadores

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

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.