gpt4 book ai didi

javascript - Jest - 检查项目不包含具有某些属性的对象

转载 作者:行者123 更新时间:2023-12-04 00:20:10 25 4
gpt4 key购买 nike

这是我需要检查的回复:

[
{ _id: 'dislike', count: 1 },
{ _id: 'hate', count: 1 },
{ _id: 'trivial', count: 1 }
]

检查现有值很容易:
expect(response.data).toContainEqual({ _id: 'trivial', count: 1 });
expect(response.data).toContainEqual({ _id: 'dislike', count: 1 });
expect(response.data).toContainEqual({ _id: 'hate', count: 1 });

但我需要检查数组是否不包含带有 { _id: 'neutral' } 的对象。以下测试看起来很成功,因为测试通过了:
expect(response.data).not.toContain({ _id: 'neutral', count: 0 });

但我想确保它符合我的预期,所以我添加了一个会失败的测试。但它没有:
expect(response.data).not.toContain({ _id: 'hate', count: 1 });

你能看到吗你能明白吗?两个测试 toContainEqualnot.toContain是有效的。如何确保数组不包含具有属性 _id: 'neutral' 的对象?

最佳答案

匹配器 toContain 使用严格相等检查检查一个项目是否在数组中。这意味着如果您不将引用传递给您尝试测试的对象,它将始终返回 false。

因此,如果您检查:

expect(response.data).toContain({ _id: 'trivial', count: 1 });

它会失败,因为,即使您的 response.data包含具有相同属性和值的对象,它不是同一个对象(它不指向同一个引用)。

这就是为什么:
expect(response.data).not.toContain({ _id: 'neutral', count: 0 });

将始终返回 true。

如果你想检查特定的结构和值,你应该使用 toContainEqual 匹配器:
expect(response.data).not.toContainEqual({ _id: 'hate', count: 1 });

此外,如果您想检查响应数据的整个结构和值,您可以简单地使用 toEqual 匹配器:
expect(response.data).toEqual([
{ _id: 'dislike', count: 1 },
{ _id: 'hate', count: 1 },
{ _id: 'trivial', count: 1 }
]);

这将检查 response.data具有您作为参数传递的结构和值。对于扩展,它正在检查它不包含任何其他值。

关于javascript - Jest - 检查项目不包含具有某些属性的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61295986/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com