Skip to main content
Version: 25.x

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 usa Object.is para probar la igualdad exacta. If you want to check the value of an object, use toEqual or toStrictEqual instead:

test('asignación de un objeto', () => {
const datos = {uno: 1};
datos['dos'] = 2;
expect(datos).toEqual({uno: 1, dos: 2});
});

toEqual verifica recursivamente cada campo de un objeto o de un arreglo.

tip

Using toStrictEqual is preferred over using toEqual. toEqual simply ignores undefined values, whereas toStrictEqual takes them into account.

You can also test for the opposite of a matcher using not:

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

En los tests, a veces es necesario distinguir entre undefined, null, y false, pero en otras ocasiones quizás deseas tratarlos por igual. 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 verdadero
  • toBeFalsy coincide con lo que sea que el condicional if devuelva como falso

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 más precisa a lo que quiera que su código 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 la igualdad de puntos flotantes, usa toBeCloseTo en lugar de toEqual, porque no quiere que una prueba dependa de un pequeño error de redondeo.

test('agregando números de punto flotante', () => {
const value = 0.1 + 0.2;
//expect(value).toBe(0.3); Esto no funcionará debido al error de redondeo
expect(value).toBeCloseTo(0.3); // Esto funciona.
});

Cadenas de Texto

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

Vectores 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

Si quiere probar que si una función particular lanza un error al llamarse, 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 a string that must be contained in the error message or a regexp
expect(() => compileAndroidCode()).toThrow('you are using the wrong JDK');
expect(() => compileAndroidCode()).toThrow(/JDK/);

// Or you can match an exact error mesage using a regexp like below
expect(() => compileAndroidCode()).toThrow(/^you are using the wrong JDK$/); // Test fails
expect(() => compileAndroidCode()).toThrow(/^you are using the wrong JDK!$/); // Test pass
});
tip

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, revise los documentos de referencia reference docs.

Una vez que haya aprendido sobre los matchers que están disponibles, como recomendación, verifique Probando código asíncrono.