我有一个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
除了简单的顶级密钥检查(至少使用该语法)之外,还需要完全匹配。
有没有办法在忽略其余结构的情况下部分匹配嵌套哈希?
答案 0 :(得分:14)
您可以为这些匹配器使用并嵌套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'))
答案 1 :(得分:3)
对于rspec 3.6.0,这对我有效:
expect(subject).to match(a_hash_including({key: value}))