Джест: Як перевірити ключі та властивості об’єкта


85

У мене є mapModuleде я імпортую компоненти та експортую їх:

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

export default {
  name: ComponentName,
};

Як я можу протестувати його, що mapModuleмає правильні експортовані ключі, значення та що вони не є нульовими або невизначеними?

Відповіді:


117

У версії 23.3.0 жарту,

expect(string).toMatch(string) 

очікує рядок.

Використання:

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

результат проходження тесту


96

Ви можете використовувати одне з таких:

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

1
Він був оновлений в відповідно до коментарем @KristofferDorph «S
Despertaweb

7

Майте на увазі, що .toMatchObjectперевіряється, "що об’єкт JavaScript відповідає підмножині властивостей об’єкта". Тож він може мати ненавмисні твердження як такі:

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

Якщо ви хочете точно відповідати об’єкту, вам слід скористатися .toStrictEqual, доступним з jest 23:

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

Насправді саме для цього і призначене твердження 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);

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.