rspec

RSpec partial match against a nested hash


I've got a JSON structure that I'd like to match a single nested element in, while ignoring other data. The JSON looks like this (minimally):

{
  "employee": {
    "id": 1,
    "jobs_count": 0
  },
  "messages": [ "something" ]
}

Here's what I'm using right now:

response_json = JSON.parse(response.body)
expect(response_json).to include("employee")
expect(response_json["employee"]).to include("jobs_count" => 0)

What I'd like to do is something like:

expect(response_json).to include("employee" => { "jobs_count" => 0 })

Unfortunately, include requires an exact match for anything but a simple top-level key check (at least with that syntax).

Is there any way to partially match a nested hash while ignoring the rest of the structure?


Solution

  • With rspec 3.6.0, this works for me:

    expect(subject).to match(a_hash_including(key: value))