我有一个 JSON 结构,我想在其中匹配单个嵌套元素,同时忽略其他数据。 JSON 看起来像这样(至少):
{
"employee": {
"id": 1,
"jobs_count": 0
},
"messages": [ "something" ]
}
这是我现在正在使用的:
response_json = JSON.parse(response.body)
expect(response_json).to include("employee")
expect(response_json["employee"]).to include("jobs_count" => 0)
我想做的是:
expect(response_json).to include("employee" => { "jobs_count" => 0 })
不幸的是,
include
需要精确匹配除简单的顶级密钥检查之外的任何内容(至少使用该语法)。
有没有办法部分匹配嵌套哈希,同时忽略结构的其余部分?
您可以为这些匹配器使用和嵌套
hash_including
方法。
使用您的示例,您可以重写测试代码,如下所示:
expect(response_json).to include(hash_including(
employee: hash_including(jobs_count: 0)
))
(或者如果
response_json
是单个对象,则将 include
替换为 match
)
这在处理
.with
约束时也适用,例如:
expect(object).to receive(:method).with(hash_including(some: 'value'))
使用 rspec 3.6.0,这对我有用:
expect(subject).to match(a_hash_including(key: value))