RSpec与嵌套哈希的部分匹配
我有一个JSON结构,我希望在忽略其他数据的同时匹配其中的单个嵌套元素。JSON看起来是这样的(最低限度): 下面是我现在正在使用的:RSpec与嵌套哈希的部分匹配,rspec,Rspec,我有一个JSON结构,我希望在忽略其他数据的同时匹配其中的单个嵌套元素。JSON看起来是这样的(最低限度): 下面是我现在正在使用的: response_json = JSON.parse(response.body) expect(response_json).to include("employee") expect(response_json["employee"]).to include("jobs_count" => 0) 我想做的是: expect(response_json
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
除了简单的顶级键检查(至少使用该语法)之外,任何东西都需要精确匹配
有没有办法在忽略结构的其余部分的同时部分匹配嵌套哈希?您可以为这些匹配器使用并嵌套
哈希方法,包括方法
使用您的示例,您可以将测试代码重写为:
expect(response_json).to include(hash_including({
employee: hash_including(jobs_count: 0)
}))
(或者,如果response\u json
是单个对象,则将包含
替换为匹配
)
这在处理约束时也会起作用,例如:
expect(object).to receive(:method).with(hash_including(some: 'value'))
有了rspec 3.6.0,这对我来说很有用:
expect(subject).to match(a_hash_including(key: value))
TIL-嵌套散列\u包括
!不适用于我,但expect(response\u json)。包含(employee:hash\u include(jobs\u count:0))
。我猜不能将include
匹配器与hash\u include
一起使用,只需要一个。这对我来说很有效,而接受的答案却没有!
expect(subject).to match(a_hash_including(key: value))