Jest断言-包含键的对象



在Jest中,我需要测试一个预期值,该值可以是null或对象

{
main: {
prop1: 'abc',
prop2: '123',
}
}

但如果它是一个对象,那么我并不真正关心main包含什么,我也不关心prop1prop2。我只需要断言该对象包含一个名为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']))

最新更新