开玩笑:如何测试对象键和属性


85

我在mapModule哪里导入组件并导出它们:

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

export default {
  name: ComponentName,
};

我如何测试它mapModule具有正确的导出键,值并且它们不是null或未定义?

Answers:


117

在jest版本23.3.0中,

expect(string).toMatch(string) 

需要一个字符串。

使用:

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

结果通过测试


95

您可以使用以下之一:

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 '18

1
它已根据@KristofferDorph的评论进行了更新
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 ...
Dan

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);

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.