2017-07-04 27 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 
       } 
      ] 
      } 
     ] 
    } 

,并确保它包含组包含JohnEthanGroup 1。 我知道jasmine.objectContaining,但我不知道如何应用于此特定情况。 感谢您的任何建议。

回答

0

您可以通过使用jasmine.arrayContainingjasmine.objectContaining像下面达到预期的效果。

请注意:'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是乌拉圭回合的对象

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

现在你可以检查if (res["people"].length == 2)

+0

谢谢,但我更喜欢Upasana解决方案。 – bikerp