Jest: Cómo probar las claves y propiedades de los objetos


85

Tengo un lugar mapModuledonde importo componentes y los exporto:

import ComponentName from '../components/ComponentName';

export default {
  name: ComponentName,
};

¿Cómo puedo probar si mapModuletiene las claves y valores exportados correctos y que no son nulos o indefinidos?

Respuestas:


118

En la versión 23.3.0 de jest,

expect(string).toMatch(string) 

espera una cadena.

Utilizar:

const expected = { name:'component name' }
const actual = { name: 'component name', type: 'form' }
expect(actual).toMatchObject(expected)

el resultado está pasando la prueba


97

puedes usar uno de esos:

toEqual y toMatchObject son comparadores de plantillas para objetos:

let Obj = {name: 'component name', id: 2};
expect(oneObj).toEqual({name: 'component name'}) // false, should be exactly equal all Obj keys and values  
expect(oneObj).toMatchObject({name: 'component name'}) // true

o use fácilmente toHaveProperty:

let Obj = {name: 'component name'};
expect(oneObj).toHaveProperty('name') // true
expect(oneObj).toHaveProperty('name', 'component name') // true

24
Esta respuesta ya no es la correcta. toMatchdebe ser toMatchObjectsegún lo especificado por @ user3605834
Kristoffer Dorph

1
Ha sido actualizado según el comentario de @KristofferDorph
Despertaweb

7

Tenga en cuenta que .toMatchObjectcomprueba "que un objeto JavaScript coincide con un subconjunto de las propiedades de un objeto". Por lo que puede tener afirmaciones no deseadas como tal:

expect({ a: 1, b: 2 }).toMatchObject({ a: 1 }); // pass

Si desea hacer coincidir un objeto exactamente, debe usar .toStrictEqual, disponible desde jest 23:

expect({ a: 1, b: 2 }).toStrictEqual({ a: 1 }); // fail

En realidad, esa es exactamente la afirmación para la que está diseñado toMatchObject. Puede usar toEqual si no quiere ese comportamiento ...
Dan

0

Para obtener una sola clave, puede consultar

expect(Boolean(obj[prop])).toBe(true | false);

Para múltiples claves (donde todas deben estar presentes) puede usar,

expect(Boolean(obj[prop1]) && Boolean(obj[prop2])).toBe(true | false);

Para varias claves (donde debe haber alguna) puede usar

expect(Boolean(obj[prop1]) || Boolean(obj[prop2])).toBe(true | false);

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.