RSpec与嵌套哈希的部分匹配

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

我有一个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).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))