Expect
Esta página fue traducida por PageTurner AI (beta). No está respaldada oficialmente por el proyecto. ¿Encontraste un error? Reportar problema →
Cuando escribes pruebas, a menudo necesitas verificar que los valores cumplan ciertas condiciones. expect te da acceso a varios "matchers" que permiten validar diferentes aspectos.
Para matchers adicionales de Jest mantenidos por la comunidad, consulta jest-extended.
Esta página fue traducida por PageTurner AI (beta). No está respaldada oficialmente por el proyecto. ¿Encontraste un error? Reportar problema →
Los ejemplos de TypeScript en esta página solo funcionarán como se documenta si importas explícitamente las APIs de Jest:
import {expect, jest, test} from '@jest/globals';
Consulta la guía de Primeros pasos para obtener detalles sobre cómo configurar Jest con TypeScript.
Referencia
- Expect
- Modificadores
- Matchers
.toBe(value).toHaveBeenCalled().toHaveBeenCalledTimes(number).toHaveBeenCalledWith(arg1, arg2, ...).toHaveBeenLastCalledWith(arg1, arg2, ...).toHaveBeenNthCalledWith(nthCall, arg1, arg2, ....).toHaveReturned().toHaveReturnedTimes(number).toHaveReturnedWith(value).toHaveLastReturnedWith(value).toHaveNthReturnedWith(nthCall, value).toHaveLength(number).toHaveProperty(keyPath, value?).toBeCloseTo(number, numDigits?).toBeDefined().toBeFalsy().toBeGreaterThan(number | bigint).toBeGreaterThanOrEqual(number | bigint).toBeLessThan(number | bigint).toBeLessThanOrEqual(number | bigint).toBeInstanceOf(Class).toBeNull().toBeTruthy().toBeUndefined().toBeNaN().toContain(item).toContainEqual(item).toEqual(value).toMatch(regexp | string).toMatchObject(object).toMatchSnapshot(propertyMatchers?, hint?).toMatchInlineSnapshot(propertyMatchers?, inlineSnapshot).toStrictEqual(value).toThrow(error?).toThrowErrorMatchingSnapshot(hint?).toThrowErrorMatchingInlineSnapshot(inlineSnapshot)
- Comparadores asimétricos
expect.anything()expect.any(constructor)expect.arrayContaining(array)expect.not.arrayContaining(array)expect.arrayOf(value)expect.not.arrayOf(value)expect.closeTo(number, numDigits?)expect.objectContaining(object)expect.not.objectContaining(object)expect.stringContaining(string)expect.not.stringContaining(string)expect.stringMatching(string | regexp)expect.not.stringMatching(string | regexp)
- Conteo de Aserciones
- Utilidades de Extensión
- Propiedades serializables
Expect
expect(value)
La función expect se utiliza cada vez que quieres probar un valor. Rara vez llamarás expect por sí sola. En su lugar, usarás expect junto con una función "matcher" para afirmar algo sobre un valor.
Es más fácil entenderlo con un ejemplo. Supongamos que tienes un método bestLaCroixFlavor() que debería devolver el string 'grapefruit'. Así es como lo probarías:
test('the best flavor is grapefruit', () => {
expect(bestLaCroixFlavor()).toBe('grapefruit');
});
En este caso, toBe es la función matcher. Existen muchas funciones matcher diferentes, documentadas a continuación, que te ayudarán a probar distintos aspectos.
El argumento de expect debe ser el valor que produce tu código, y cualquier argumento del matcher debe ser el valor correcto. Si los intercambias, tus pruebas seguirán funcionando, pero los mensajes de error en pruebas fallidas parecerán extraños.
Modificadores
.not
Si sabes cómo probar algo, .not te permite probar su opuesto. Por ejemplo, este código verifica que el mejor sabor de La Croix no es coco:
test('the best flavor is not coconut', () => {
expect(bestLaCroixFlavor()).not.toBe('coconut');
});
.resolves
Usa resolves para desenvolver el valor de una promesa resuelta y poder encadenar otros matchers. Si la promesa es rechazada, la aserción falla.
Por ejemplo, este código verifica que la promesa se resuelve y que el valor resultante es 'lemon':
test('resolves to lemon', () => {
// make sure to add a return statement
return expect(Promise.resolve('lemon')).resolves.toBe('lemon');
});
Como aún estás probando promesas, la prueba sigue siendo asíncrona. Por lo tanto, necesitarás indicarle a Jest que espere devolviendo la aserción desenvuelta.
Alternativamente, puedes usar async/await combinado con .resolves:
test('resolves to lemon', async () => {
await expect(Promise.resolve('lemon')).resolves.toBe('lemon');
await expect(Promise.resolve('lemon')).resolves.not.toBe('octopus');
});
.rejects
Usa .rejects para desenvolver el motivo de una promesa rechazada y poder encadenar otros matchers. Si la promesa se resuelve, la aserción falla.
Por ejemplo, este código verifica que la promesa es rechazada con el motivo 'octopus':
test('rejects to octopus', () => {
// make sure to add a return statement
return expect(Promise.reject(new Error('octopus'))).rejects.toThrow(
'octopus',
);
});
Como aún estás probando promesas, la prueba sigue siendo asíncrona. Por lo tanto, necesitarás indicarle a Jest que espere devolviendo la aserción desenvuelta.
Alternativamente, puedes usar async/await combinado con .rejects.
test('rejects to octopus', async () => {
await expect(Promise.reject(new Error('octopus'))).rejects.toThrow('octopus');
});
Matchers
.toBe(value)
Usa .toBe para comparar valores primitivos o verificar la identidad referencial de instancias de objetos. Llama a Object.is para comparar valores, lo cual es incluso mejor para pruebas que el operador de igualdad estricta ===.
Por ejemplo, este código validará algunas propiedades del objeto can:
const can = {
name: 'pamplemousse',
ounces: 12,
};
describe('the can', () => {
test('has 12 ounces', () => {
expect(can.ounces).toBe(12);
});
test('has a sophisticated name', () => {
expect(can.name).toBe('pamplemousse');
});
});
No uses .toBe con números de punto flotante. Por ejemplo, debido al redondeo en JavaScript, 0.2 + 0.1 no es estrictamente igual a 0.3. Si trabajas con números decimales, usa .toBeCloseTo.
Aunque el matcher .toBe verifica la identidad referencial, reporta una comparación profunda de valores cuando la aserción falla. Si las diferencias entre propiedades no te ayudan a entender por qué falla una prueba, especialmente si el reporte es extenso, puedes mover la comparación a la función expect. Por ejemplo, para verificar si los elementos son la misma instancia:
-
reescribe
expect(received).toBe(expected)comoexpect(Object.is(received, expected)).toBe(true) -
reescribe
expect(received).not.toBe(expected)comoexpect(Object.is(received, expected)).toBe(false)
.toHaveBeenCalled()
Usa .toHaveBeenCalled para verificar que una función simulada (mock) fue llamada.
Por ejemplo, supongamos que tienes una función drinkAll(drink, flavour) que toma una función drink y la aplica a todas las bebidas disponibles. Puedes verificar que drink fue llamada con este conjunto de pruebas:
function drinkAll(callback, flavour) {
if (flavour !== 'octopus') {
callback(flavour);
}
}
describe('drinkAll', () => {
test('drinks something lemon-flavoured', () => {
const drink = jest.fn();
drinkAll(drink, 'lemon');
expect(drink).toHaveBeenCalled();
});
test('does not drink something octopus-flavoured', () => {
const drink = jest.fn();
drinkAll(drink, 'octopus');
expect(drink).not.toHaveBeenCalled();
});
});
.toHaveBeenCalledTimes(number)
Usa .toHaveBeenCalledTimes para asegurar que una función simulada fue llamada un número exacto de veces.
Por ejemplo, imagina una función drinkEach(drink, Array<flavor>) que toma una función drink y la aplica a un array de bebidas. Puedes verificar que la función drink fue llamada un número exacto de veces con esta prueba:
test('drinkEach drinks each drink', () => {
const drink = jest.fn();
drinkEach(drink, ['lemon', 'octopus']);
expect(drink).toHaveBeenCalledTimes(2);
});
.toHaveBeenCalledWith(arg1, arg2, ...)
Usa .toHaveBeenCalledWith para verificar que una función simulada fue llamada con argumentos específicos. Los argumentos se comparan con el mismo algoritmo que usa .toEqual.
Por ejemplo, supón que puedes registrar una bebida con una función register, y applyToAll(f) debería aplicar la función f a todas las bebidas registradas. Para verificarlo, podrías escribir:
test('registration applies correctly to orange La Croix', () => {
const beverage = new LaCroix('orange');
register(beverage);
const f = jest.fn();
applyToAll(f);
expect(f).toHaveBeenCalledWith(beverage);
});
.toHaveBeenLastCalledWith(arg1, arg2, ...)
Para funciones simuladas, usa .toHaveBeenLastCalledWith para probar con qué argumentos fue llamada por última vez. Por ejemplo, si tienes una función applyToAllFlavors(f) que aplica f a varios sabores, y quieres asegurar que el último sabor procesado fue 'mango':
test('applying to all flavors does mango last', () => {
const drink = jest.fn();
applyToAllFlavors(drink);
expect(drink).toHaveBeenLastCalledWith('mango');
});
.toHaveBeenNthCalledWith(nthCall, arg1, arg2, ....)
Para funciones simuladas, usa .toHaveBeenNthCalledWith para verificar los argumentos de la llamada número n. Por ejemplo, con una función drinkEach(drink, Array<flavor>) que aplica f a varios sabores, para verificar que el primer sabor fue 'lemon' y el segundo 'octopus':
test('drinkEach drinks each drink', () => {
const drink = jest.fn();
drinkEach(drink, ['lemon', 'octopus']);
expect(drink).toHaveBeenNthCalledWith(1, 'lemon');
expect(drink).toHaveBeenNthCalledWith(2, 'octopus');
});
El argumento nthCall debe ser un número entero positivo empezando desde 1.
.toHaveReturned()
Para funciones simuladas, usa .toHaveReturned para verificar que la función retornó exitosamente (sin lanzar errores) al menos una vez. Por ejemplo, con una función simulada drink que retorna true:
test('drinks returns', () => {
const drink = jest.fn(() => true);
drink();
expect(drink).toHaveReturned();
});
.toHaveReturnedTimes(number)
Usa .toHaveReturnedTimes para asegurar que una función simulada retornó exitosamente (sin errores) un número exacto de veces. Las llamadas que lancen errores no cuentan.
Por ejemplo, con una función simulada drink que retorna true:
test('drink returns twice', () => {
const drink = jest.fn(() => true);
drink();
drink();
expect(drink).toHaveReturnedTimes(2);
});
.toHaveReturnedWith(value)
Usa .toHaveReturnedWith para verificar que una función simulada retornó un valor específico.
Por ejemplo, imagina que tienes una función simulada drink que devuelve el nombre de la bebida consumida. Puedes escribir:
test('drink returns La Croix', () => {
const beverage = {name: 'La Croix'};
const drink = jest.fn(beverage => beverage.name);
drink(beverage);
expect(drink).toHaveReturnedWith('La Croix');
});
.toHaveLastReturnedWith(value)
Usa .toHaveLastReturnedWith para verificar el valor específico que una función simulada devolvió en su última ejecución. Si la última llamada a la función simulada lanzó un error, este matcher fallará independientemente del valor esperado que hayas proporcionado.
Por ejemplo, imagina que tienes una función simulada drink que devuelve el nombre de la bebida consumida. Puedes escribir:
test('drink returns La Croix (Orange) last', () => {
const beverage1 = {name: 'La Croix (Lemon)'};
const beverage2 = {name: 'La Croix (Orange)'};
const drink = jest.fn(beverage => beverage.name);
drink(beverage1);
drink(beverage2);
expect(drink).toHaveLastReturnedWith('La Croix (Orange)');
});
.toHaveNthReturnedWith(nthCall, value)
Usa .toHaveNthReturnedWith para verificar el valor específico que una función simulada devolvió en su enésima llamada (nth call). Si la enésima llamada a la función simulada lanzó un error, este matcher fallará independientemente del valor esperado que hayas proporcionado.
Por ejemplo, imagina que tienes una función simulada drink que devuelve el nombre de la bebida consumida. Puedes escribir:
test('drink returns expected nth calls', () => {
const beverage1 = {name: 'La Croix (Lemon)'};
const beverage2 = {name: 'La Croix (Orange)'};
const drink = jest.fn(beverage => beverage.name);
drink(beverage1);
drink(beverage2);
expect(drink).toHaveNthReturnedWith(1, 'La Croix (Lemon)');
expect(drink).toHaveNthReturnedWith(2, 'La Croix (Orange)');
});
El argumento nthCall debe ser un número entero positivo empezando desde 1.
.toHaveLength(number)
Usa .toHaveLength para verificar que un objeto tiene una propiedad .length con un valor numérico específico.
Es especialmente útil para comprobar el tamaño de arrays o cadenas de texto.
expect([1, 2, 3]).toHaveLength(3);
expect('abc').toHaveLength(3);
expect('').not.toHaveLength(5);
.toHaveProperty(keyPath, value?)
Usa .toHaveProperty para verificar si existe una propiedad en la ruta keyPath de un objeto. Para propiedades anidadas, puedes usar notación de punto o un array con la ruta completa.
Puedes proporcionar un argumento opcional value para comparar el valor de la propiedad recibida (usa igualdad profunda como el matcher toEqual).
El siguiente ejemplo contiene un objeto houseForSale con propiedades anidadas. Usamos toHaveProperty para verificar la existencia y valores de varias propiedades:
// Object containing house features to be tested
const houseForSale = {
bath: true,
bedrooms: 4,
kitchen: {
amenities: ['oven', 'stove', 'washer'],
area: 20,
wallColor: 'white',
'nice.oven': true,
},
livingroom: {
amenities: [
{
couch: [
['large', {dimensions: [20, 20]}],
['small', {dimensions: [10, 10]}],
],
},
],
},
'ceiling.height': 2,
};
test('this house has my desired features', () => {
// Example Referencing
expect(houseForSale).toHaveProperty('bath');
expect(houseForSale).toHaveProperty('bedrooms', 4);
expect(houseForSale).not.toHaveProperty('pool');
// Deep referencing using dot notation
expect(houseForSale).toHaveProperty('kitchen.area', 20);
expect(houseForSale).toHaveProperty('kitchen.amenities', [
'oven',
'stove',
'washer',
]);
expect(houseForSale).not.toHaveProperty('kitchen.open');
// Deep referencing using an array containing the keyPath
expect(houseForSale).toHaveProperty(['kitchen', 'area'], 20);
expect(houseForSale).toHaveProperty(
['kitchen', 'amenities'],
['oven', 'stove', 'washer'],
);
expect(houseForSale).toHaveProperty(['kitchen', 'amenities', 0], 'oven');
expect(houseForSale).toHaveProperty(
'livingroom.amenities[0].couch[0][1].dimensions[0]',
20,
);
expect(houseForSale).toHaveProperty(['kitchen', 'nice.oven']);
expect(houseForSale).not.toHaveProperty(['kitchen', 'open']);
// Referencing keys with dot in the key itself
expect(houseForSale).toHaveProperty(['ceiling.height'], 'tall');
});
.toBeCloseTo(number, numDigits?)
Usa toBeCloseTo para comparar números de punto flotante con igualdad aproximada.
El argumento opcional numDigits limita los dígitos a comprobar después del punto decimal. Por defecto (2), el criterio es Math.abs(expected - received) < 0.005 (equivalente a 10 ** -2 / 2).
Las comparaciones intuitivas a menudo fallan porque los valores decimales (base 10) tienen errores de redondeo en representación binaria (base 2). Por ejemplo, esta prueba falla:
test('adding works sanely with decimals', () => {
expect(0.2 + 0.1).toBe(0.3); // Fails!
});
Falla porque en JavaScript, 0.2 + 0.1 equivale realmente a 0.30000000000000004.
Por ejemplo, esta prueba pasa con una precisión de 5 dígitos:
test('adding works sanely with decimals', () => {
expect(0.2 + 0.1).toBeCloseTo(0.3, 5);
});
Como toBeCloseTo resuelve errores de punto flotante, no soporta valores enteros grandes.
.toBeDefined()
Usa .toBeDefined para verificar que una variable no es undefined. Por ejemplo, para comprobar que fetchNewFlavorIdea() devuelve algo:
test('there is a new flavor idea', () => {
expect(fetchNewFlavorIdea()).toBeDefined();
});
Podrías usar expect(fetchNewFlavorIdea()).not.toBe(undefined), pero es mejor evitar referenciar undefined directamente.
.toBeFalsy()
Usa .toBeFalsy cuando no te importe el valor concreto pero necesites verificar que es falso en contexto booleano. Por ejemplo, si tienes código como:
drinkSomeLaCroix();
if (!getErrors()) {
drinkMoreLaCroix();
}
Quizá no te importe qué devuelve específicamente getErrors - podría devolver false, null o 0, y tu código seguiría funcionando. Así que si quieres verificar que no hay errores después de beber un poco de La Croix, podrías escribir:
test('drinking La Croix does not lead to errors', () => {
drinkSomeLaCroix();
expect(getErrors()).toBeFalsy();
});
En JavaScript, existen seis valores falsy: false, 0, '', null, undefined y NaN. Todo lo demás es truthy.
.toBeGreaterThan(number | bigint)
Usa toBeGreaterThan para comparar received > expected con valores numéricos o big integer. Por ejemplo, para probar que ouncesPerCan() devuelve un valor superior a 10 onzas:
test('ounces per can is more than 10', () => {
expect(ouncesPerCan()).toBeGreaterThan(10);
});
.toBeGreaterThanOrEqual(number | bigint)
Usa toBeGreaterThanOrEqual para comparar received >= expected con valores numéricos o big integer. Por ejemplo, para probar que ouncesPerCan() devuelve un valor de al menos 12 onzas:
test('ounces per can is at least 12', () => {
expect(ouncesPerCan()).toBeGreaterThanOrEqual(12);
});
.toBeLessThan(number | bigint)
Usa toBeLessThan para comparar received < expected con valores numéricos o big integer. Por ejemplo, para probar que ouncesPerCan() devuelve un valor inferior a 20 onzas:
test('ounces per can is less than 20', () => {
expect(ouncesPerCan()).toBeLessThan(20);
});
.toBeLessThanOrEqual(number | bigint)
Usa toBeLessThanOrEqual para comparar received <= expected con valores numéricos o big integer. Por ejemplo, para probar que ouncesPerCan() devuelve un valor máximo de 12 onzas:
test('ounces per can is at most 12', () => {
expect(ouncesPerCan()).toBeLessThanOrEqual(12);
});
.toBeInstanceOf(Class)
Usa .toBeInstanceOf(Class) para verificar que un objeto es instancia de una clase. Este matcher utiliza internamente instanceof.
class A {}
expect(new A()).toBeInstanceOf(A);
expect(() => {}).toBeInstanceOf(Function);
expect(new A()).toBeInstanceOf(Function); // throws
.toBeNull()
.toBeNull() es equivalente a .toBe(null) pero con mensajes de error más claros. Usa .toBeNull() cuando quieras verificar que algo es null.
function bloop() {
return null;
}
test('bloop returns null', () => {
expect(bloop()).toBeNull();
});
.toBeTruthy()
Usa .toBeTruthy cuando no te importe el valor específico pero quieras asegurar que es verdadero en contexto booleano. Por ejemplo, imagina que tienes código como:
drinkSomeLaCroix();
if (thirstInfo()) {
drinkMoreLaCroix();
}
Quizá no te importe qué devuelve thirstInfo específicamente - podría devolver true o un objeto complejo, y tu código seguiría funcionando. Así que si quieres probar que thirstInfo será truthy después de beber La Croix, podrías escribir:
test('drinking La Croix leads to having thirst info', () => {
drinkSomeLaCroix();
expect(thirstInfo()).toBeTruthy();
});
En JavaScript, existen seis valores falsy: false, 0, '', null, undefined y NaN. Todo lo demás es truthy.
.toBeUndefined()
Usa .toBeUndefined para verificar que una variable es undefined. Por ejemplo, si quieres comprobar que bestDrinkForFlavor(flavor) devuelve undefined para el sabor 'octopus' porque no hay bebidas buenas con sabor a pulpo:
test('the best drink for octopus flavor is undefined', () => {
expect(bestDrinkForFlavor('octopus')).toBeUndefined();
});
Podrías escribir expect(bestDrinkForFlavor('octopus')).toBe(undefined), pero es mejor práctica evitar referenciar undefined directamente en tu código.
.toBeNaN()
Usa .toBeNaN para verificar que un valor es NaN.
test('passes when value is NaN', () => {
expect(NaN).toBeNaN();
expect(1).not.toBeNaN();
});
.toContain(item)
Usa .toContain para verificar que un elemento está en un array. Para los elementos del array, usa === (comparación estricta). .toContain también puede verificar si un string es subcadena de otro.
Por ejemplo, si getAllFlavors() devuelve un array de sabores y quieres asegurarte que lime está incluido:
test('the flavor list contains lime', () => {
expect(getAllFlavors()).toContain('lime');
});
Este matcher también acepta otros iterables como strings, sets, node lists y HTML collections.
.toContainEqual(item)
Usa .toContainEqual cuando quieras verificar que un elemento con estructura y valores específicos está contenido en un array. Para evaluar los elementos del array, este matcher comprueba recursivamente la igualdad de todos los campos, en lugar de verificar la identidad del objeto.
describe('my beverage', () => {
test('is delicious and not sour', () => {
const myBeverage = {delicious: true, sour: false};
expect(myBeverages()).toContainEqual(myBeverage);
});
});
.toEqual(value)
Usa .toEqual para comparar recursivamente todas las propiedades de instancias de objetos (conocido como igualdad "profunda"). Llama a Object.is para comparar valores primitivos, lo cual es incluso mejor para pruebas que el operador de igualdad estricta ===.
Por ejemplo, .toEqual y .toBe se comportan de forma diferente en esta suite de pruebas, por lo que todos los tests pasan:
const can1 = {
flavor: 'grapefruit',
ounces: 12,
};
const can2 = {
flavor: 'grapefruit',
ounces: 12,
};
describe('the La Croix cans on my desk', () => {
test('have all the same properties', () => {
expect(can1).toEqual(can2);
});
test('are not the exact same can', () => {
expect(can1).not.toBe(can2);
});
});
toEqual ignora claves de objeto con propiedades undefined, elementos de array undefined, arrays dispersos o discrepancias en el tipo de objeto. Para considerar estos casos, usa .toStrictEqual en su lugar.
.toEqual no realiza una verificación de igualdad profunda para dos errores. Solo se considera la propiedad message de un Error para la igualdad. Se recomienda usar el matcher .toThrow para probar errores.
Si las diferencias entre propiedades no te ayudan a entender por qué falla un test, especialmente si el informe es extenso, puedes trasladar la comparación a la función expect. Por ejemplo, usa el método equals de la clase Buffer para verificar si los buffers contienen el mismo contenido:
-
reescribe
expect(received).toEqual(expected)comoexpect(received.equals(expected)).toBe(true) -
reescribe
expect(received).not.toEqual(expected)comoexpect(received.equals(expected)).toBe(false)
.toMatch(regexp | string)
Usa .toMatch para verificar que una cadena coincide con una expresión regular.
Por ejemplo, quizás no sepas qué devuelve exactamente essayOnTheBestFlavor(), pero sabes que es una cadena muy larga y que la subcadena grapefruit debería aparecer en algún lugar. Puedes probarlo así:
describe('an essay on the best flavor', () => {
test('mentions grapefruit', () => {
expect(essayOnTheBestFlavor()).toMatch(/grapefruit/);
expect(essayOnTheBestFlavor()).toMatch(new RegExp('grapefruit'));
});
});
Este matcher también acepta una cadena, que intentará coincidir:
describe('grapefruits are healthy', () => {
test('grapefruits are a fruit', () => {
expect('grapefruits').toMatch('fruit');
});
});
.toMatchObject(object)
Usa .toMatchObject para verificar que un objeto JavaScript coincide con un subconjunto de propiedades de otro objeto. Coincidirá con objetos recibidos que tengan propiedades que no están en el objeto esperado.
También puedes pasar un array de objetos, en cuyo caso el método devolverá true solo si cada objeto en el array recibido coincide (en el sentido de toMatchObject descrito) con el objeto correspondiente en el array esperado. Esto es útil si quieres verificar que dos arrays coinciden en su número de elementos, a diferencia de arrayContaining, que permite elementos adicionales en el array recibido.
Puedes comparar propiedades contra valores o contra otros matchers.
const houseForSale = {
bath: true,
bedrooms: 4,
kitchen: {
amenities: ['oven', 'stove', 'washer'],
area: 20,
wallColor: 'white',
},
};
const desiredHouse = {
bath: true,
kitchen: {
amenities: ['oven', 'stove', 'washer'],
wallColor: expect.stringMatching(/white|yellow/),
},
};
test('the house has my desired features', () => {
expect(houseForSale).toMatchObject(desiredHouse);
});
describe('toMatchObject applied to arrays', () => {
test('the number of elements must match exactly', () => {
expect([{foo: 'bar'}, {baz: 1}]).toMatchObject([{foo: 'bar'}, {baz: 1}]);
});
test('.toMatchObject is called for each elements, so extra object properties are okay', () => {
expect([{foo: 'bar'}, {baz: 1, extra: 'quux'}]).toMatchObject([
{foo: 'bar'},
{baz: 1},
]);
});
});
.toMatchSnapshot(propertyMatchers?, hint?)
Esto asegura que un valor coincide con la instantánea más reciente. Consulta la guía de Snapshot Testing para más información.
Puedes proporcionar un argumento opcional propertyMatchers de tipo objeto, que contiene comparadores asimétricos como valores de un subconjunto de propiedades esperadas, si el valor recibido será una instancia de objeto. Es similar a toMatchObject con criterios flexibles para un subconjunto de propiedades, seguido de una prueba de instantánea como criterio exacto para las propiedades restantes.
Puedes proporcionar un argumento opcional hint (pista) de tipo cadena que se añade al nombre del test. Aunque Jest siempre añade un número al final del nombre de la instantánea, las pistas descriptivas breves pueden ser más útiles que números para diferenciar múltiples instantáneas en un único bloque it o test. Jest ordena las instantáneas por nombre en el archivo .snap correspondiente.