2017-07-04 7 views
0

どのようにオブジェクトを配列プロパティと部分的にマッチさせる方法がありますか?のは、私は、このオブジェクトにジャスミンでオブジェクトを部分的にチェックするには

 

    { 
     "groups": [ 
      { 
      "id": 1, 
      "name": "Group 1", 
      "people": [ 
       { 
        "firstName": "John", 
        "age": 23 
       }, 
       { 
        "firstName": "Ethan", 
        "age": 18 
       } 
      ] 
      }, 
      { 
      "id": 2, 
      "name": "Group 2", 
      "people": [ 
       { 
        "firstName": "Peter", 
        "age": 47 
       }, 
       { 
        "firstName": "Henry", 
        "age": 55 
       } 
      ] 
      } 
     ] 
    } 

をテストし、それがJohnEthanを含む名前Group 1を持つグループが含まれていることを確認したいと仮定しましょう。 私はjasmine.objectContainingを認識していますが、この特定のケースにどのように適用するのか分かりません。 ありがとうございます。

答えて

0

を確認することができます

var res = obj["groups"].find(function(a) { return a["name"] == "group 1"; }); 
res = res["people"].filter(function(person) { 
     return ["Ethan","John"].includes(person["name"]); 
    }); 

ウルオブジェクトであると仮定します。

注意: 'foo'は、上記のようにテストデータが存在する変数です。

describe("Array comparison", function() { 

    it("matches objects with the expect key/value pairs", function() { 

    expect(foo).toEqual(jasmine.objectContaining({ 

     groups: jasmine.arrayContaining([ 
     jasmine.objectContaining({name: "Group 2"}), 
     jasmine.objectContaining({ 
      people: jasmine.arrayContaining([ 
       jasmine.objectContaining({firstName: "Peter"}), 
       jasmine.objectContaining({firstName: "Henry"}) 
      ]) 
     }) 
     ]) 
    })); 

Hereは、上記の作業コードのjsFiddleです。

+0

ありがとう!これはまさに私が探していたものです。 – bikerp

0

このような意味ですか? objが今、あなたはあなたが以下のようにjasmine.arrayContainingjasmine.objectContainingを使用して所望の結果を達成することができますif (res["people"].length == 2)

+0

ありがとう、しかし、私はUpasanaソリューションを好む。 – bikerp

関連する問題