我有mapModule
我导入组件并将其导出:
import ComponentName from '../components/ComponentName';
export default {
name: ComponentName,
};
如何测试mapModule
是否具有正确的导出键,值以及它们是否为空或未定义?
答案 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
结合使用,以根据值测试给定的正则表达式。很整洁。