我有一个mapModule,我导入组件并导出它们:
import ComponentName from '../components/ComponentName';
export default {
name: ComponentName,
};
我如何测试mapModule有正确的导出键,值,他们不是空或未定义?
我有一个mapModule,我导入组件并导出它们:
import ComponentName from '../components/ComponentName';
export default {
name: ComponentName,
};
我如何测试mapModule有正确的导出键,值,他们不是空或未定义?
当前回答
在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)
结果通过测试
其他回答
你可以使用其中之一:
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)
结果通过测试
另一种方法是:
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
请记住.toMatchObject检查
“JavaScript对象匹配对象属性的子集。”
所以toMatchObject可以有意想不到的断言,比如:
expect({ a: 1, b: 2 }).toMatchObject({ a: 1 }); // pass
如果你想精确匹配一个对象,你应该使用.toStrictEqual,自jest 23起可用:
expect({ a: 1, b: 2 }).toStrictEqual({ a: 1 }); // fail