我有一个mapModule,我导入组件并导出它们:

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

export default {
  name: ComponentName,
};

我如何测试mapModule有正确的导出键,值,他们不是空或未定义?


你可以使用其中之一:

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

在23.3.0版本的jest中,

expect(string).toMatch(string) 

期望一个字符串。

Use:

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

结果通过测试


请记住.toMatchObject检查

“JavaScript对象匹配对象属性的子集。”

所以toMatchObject可以有意想不到的断言,比如:

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

如果你想精确匹配一个对象,你应该使用.toStrictEqual,自jest 23起可用:

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

你可以用单把钥匙结账

期望(布尔(obj[支持]))。toBe(true | false);

对于多个键(所有键都必须存在),您可以使用,

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

对于多个键(其中任何一个必须存在),您可以使用

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


另一种方法是:

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

这将确保对象是相同的。

然而使用这个:

expect(object).toMatchObject(object)

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


只是添加了这个技巧,认为它为我自己的测试提供了更好的粒度,特别是在匹配被模拟服务的参数时:

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

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

expect.stringContaining expect.stringMatching