比方说,某些东西返回一个复杂的对象:
const value = {
...,
client: { ... },
...
};
我想测试一堆属性,对于client
,我想确保它具有特定的name
,但根本没有id
。
我该如何实施?
expect(value).toMatchObject({
...,
client: ???,
...
});
如果只是name
,我会做client: { name: 'expected' }
。
我尝试了client: { id: undefined, name: "expected" }
,但是undefined
与“没有财产”不同。
我知道我可以单独处理expect(value).not.toHaveProperty('client.name')
,但是最好只拥有一个toMatchObject
(我需要在多个测试中使用)。
答案 0 :(得分:0)
清除未定义的属性,然后进行比较
function clear(a){
Object.keys(a).forEach(key => {
if (a[key] === undefined) {
delete a[key];
}
});
}
let client = { id: undefined, name: "expected" }
clear(client )
console.log(client)
答案 1 :(得分:0)
对此表示怀疑,但仍然希望知道是否有更好的方法:
expect.extend({
matchingAll(actual, expected) {
return { pass: expected.every(e => e.asymmetricMatch(actual)) };
}
});
expect(value).toMatchObject({
...,
client: expect.matchingAll([
expect.objectContaining({ name: 'expected' }),
expect.not.objectContaining({ id: expect.anything() }),
]),
...
});