2016-10-30 9 views
5

他のデータを無視しながら、1つのネストされた要素に一致させたいJSON構造体があります。 JSONは(最低限)次のようになります。ネストされたハッシュとのRSpec部分一致

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

ここで私が今使っているものです:

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

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

私が何をしたいのですがどうのようなものです残念ながら、includeは、単純なトップレベルのキーチェック(少なくともその構文で)以外のものとは完全に一致する必要があります。

構造の残りの部分を無視しながら、ネストされたハッシュと部分的に一致する方法はありますか?

答えて

4

これらのマッチャーにはhash_includingメソッドを使用してネストすることができます。あなたの例を使用して

、あなたが見えるようにテストコードを書き換えることができます(matchincludeを交換、またはresponse_jsonは単一のオブジェクトである場合)

​​

を扱う場合にも動作します.withの制約は、たとえば:

expect(object).to receive(:method).with(hash_including(some: 'value')) 
関連する問題