在Jest中,我需要测试一个预期值,该值可以是null或对象
{
main: {
prop1: 'abc',
prop2: '123',
}
}
但如果它是一个对象,那么我并不真正关心main
包含什么,我也不关心prop1
或prop2
。我只需要断言该对象包含一个名为main
的密钥。
Jest引用提到了objectContaining
,但它仍然要求我至少指定一个props
,从而使我的代码变得不必要地冗长。
有没有任何快速的方法可以实现一个可以命名为objectContainingKey
的断言,比如:
expect(something).toEqual(expect.objectContainingKey('main'))
文档有一些比公认的答案更合适、更可读的东西:
expect(obj.main).toBeDefined();
假设
const something = {
main: {
prop1: 'abc',
prop2: '123',
}
}
然后,您可以使用objectContaining和any来检查something
是否是一个包含密钥main
的对象,该密钥包含对象
expect(something).toEqual(
expect.objectContaining({
main: expect.any(Object),
});
);
或者你可以用一种有点棘手的方法
const something = { main: { prop1: 'abc', prop2: '123' } }
expect(Object.keys(something).toString()).toBe('main')
和
expect(Object.keys(something.main).toString()).toBe('prop1')
expect(Object.keys(something.main).toString()).toBe('prop2')
或
expect(Object.keys(something.main))
.toEqual(expect.arrayContaining(['prop1', 'prop2']))