Jest: Como testar chaves e propriedades de objetos


93

Tenho um mapModuleonde importo componentes e exporto-os:

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

export default {
  name: ComponentName,
};

Como posso testar se mapModuletem as chaves, valores exportados corretos e se eles não são nulos ou indefinidos?

Respostas:


128

Na versão 23.3.0 de jest,

expect(string).toMatch(string) 

espera uma string.

Usar:

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

resultado está passando no teste


101

você pode usar um destes:

toEqual e toMatchObject são correspondências de modelo 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

ou use facilmente toHaveProperty:

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

24
Esta resposta não é mais a correta. toMatchdeve ser toMatchObjectconforme especificado por @ user3605834
Kristoffer Dorph

1
Foi atualizado de acordo com o comentário de @KristofferDorph
Despertaweb

8

Lembre-se de que .toMatchObjectverifica "se um objeto JavaScript corresponde a um subconjunto das propriedades de um objeto". Portanto, ele pode ter afirmações não intencionais como:

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

Se você deseja corresponder exatamente a um objeto, deve usar .toStrictEqual, disponível desdejest 23 :

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

Na verdade, é exatamente para essa afirmação que toMatchObject foi projetado. Você pode usar toEqual se não quiser esse comportamento ...
Dan

0

Para uma única chave, você pode verificar

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

Para várias chaves (onde todas devem estar presentes), você pode usar,

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

Para várias chaves (onde qualquer uma deve estar presente), você pode usar

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

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.