Jest:如何测试对象键和属性

时间:2017-12-11 14:11:27

标签: javascript unit-testing jestjs

我有mapModule我导入组件并将其导出:

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

export default {
  name: ComponentName,
};

如何测试mapModule是否具有正确的导出键,值以及它们是否为空或未定义?

6 个答案:

答案 0 :(得分:30)

您可以使用其中之一:

toEqual和toMatch是对象的模板匹配器:

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).toMatch({name: 'component name'}) // true

或轻松使用toHaveProperty:

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

答案 1 :(得分:28)

在玩笑版本23.3.0中,

expect(string).toMatch(string) 

期望一个字符串。

使用:

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

结果通过测试

答案 2 :(得分:7)

请记住,.toMatchObject检查“ JavaScript对象与对象属性的子集匹配”。因此它可能具有这样的意外声明:

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

如果您确实想精确匹配对象,则应使用.toStrictEqual之后的jest 23

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

答案 3 :(得分:3)

另一种方法是:

expect(JSON.stringify(object)).toBe(JSON.stringify(object))

这将确保对象相同。

但是使用这个:

expect(object).toMatchObject(object)

在大多数情况下是最好的选择。

答案 4 :(得分: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);

答案 5 :(得分:0)

刚刚添加这个提示,认为它为我自己的测试提供了更好的粒度,尤其是在与模拟服务的参数匹配时:

expect.objectContaining({
   url: expect.stringContaining('https://'),
})

或者,您可以将正则表达式与 expect.stringMatching 结合使用,以根据值测试给定的正则表达式。很整洁。

expect.stringContaining expect.stringMatching