javascript - 开玩笑 - 检查项目是否不包含具有某些属性的对象
问题描述
这是我需要检查的回复:
[
{ _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 });
你能看到吗你能明白吗?两个测试toContainEqual
都not.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
您作为参数传递的结构和值。对于扩展,它正在检查它是否不包含任何其他值。
推荐阅读
- r - rowwise() 与 dplyr 中的列名向量求和
- sql-server - 设置多个 XMLNAMESPACES 以在 SQL 查询中说明不同版本的 SSRS/SQL
- javascript - 数组属性的传单层控件弄乱了结果,如何解决?大量geoJSON数据和几个过滤器的更好解决方案?
- python - 生成的类在 Python 上有冲突
- javascript - wikiitude:未捕获的建筑师错误:属性 rotate.z 不可动画
- python - 实时流 - 创建子列表列表。每个子列表的长度必须等于 1 分钟的流
- javascript - 如何在 React 的分层组件中使用 {Switch, Route}?
- r - 如何在R中按组创建带有颜色的散点图
- php - LAZADA开放平台-授权码无效
- tensorflow - 嵌入投影仪中的 TSNE,如何复制