Jest: Как проверить ключи и свойства объекта

93

У меня есть место, mapModuleкуда я импортирую компоненты и экспортирую их:

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

export default {
  name: ComponentName,
};

Как я могу проверить, что у mapModuleнего есть правильные экспортированные ключи и значения, и что они не являются нулевыми или неопределенными?

Fasenberg
источник

Ответы:

128

В версии 23.3.0 jest,

expect(string).toMatch(string) 

ожидает строку.

Использование:

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

результат проходит тест

user3605834
источник
101

вы можете использовать один из них:

toEqual и toMatchObject - сопоставители шаблонов для объектов:

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

или просто используйте toHaveProperty:

let Obj = {name: 'component name'};
expect(oneObj).toHaveProperty('name') // true
expect(oneObj).toHaveProperty('name', 'component name') // true
Туфек Хури
источник
24
Этот ответ больше не правильный. toMatchдолжно быть таким, toMatchObjectкак указано @ user3605834
Kristoffer Dorph
1
Он был обновлен в соответствии с комментарием @KristofferDorph
Despertaweb
8

Имейте в виду, что это .toMatchObjectпроверяет, «что объект JavaScript соответствует подмножеству свойств объекта». Таким образом, у него могут быть непреднамеренные утверждения как таковые:

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

Если вы хотите точно сопоставить объект, вы должны использовать .toStrictEqual, доступно сjest 23 :

expect({ a: 1, b: 2 }).toStrictEqual({ a: 1 }); // fail
rtorres
источник
Собственно, именно для этого и предназначен toMatchObject. Вы можете использовать toEqual, если не хотите такого поведения ...
Дэн
0

За один ключ можно оформить заказ

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

Для нескольких ключей (где все должно присутствовать) вы можете использовать,

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

Для нескольких ключей (где должен присутствовать любой) вы можете использовать

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

Деворейн
источник