如何使用 Jasmine 部分检查对象

bik*_*erp 3 javascript testing unit-testing jasmine

有没有办法将对象与数组属性部分匹配?假设我想测试这个对象

    {
       “组”:[
          {
             “身份证”:1,
             "name": "第 1 组",
             “人们”: [
                {
                   "firstName": "约翰",
                   “年龄”:23
                },
                {
                   "firstName": "伊森",
                   “年龄”:18
                }
             ]
          },
          {
             “身份证”:2,
             "name": "第 2 组",
             “人们”: [
                {
                   "firstName": "彼得",
                   “年龄”:47
                },
                {
                   "firstName": "亨利",
                   “年龄”:55
                }
             ]
          }
       ]
    }

并确保它包含名称Group 1包含John和的组Ethan。我知道 jasmine.objectContaining 但我不知道如何应用于这个特殊情况。感谢您的任何建议。

Upa*_*ana 7

您可以使用下面的jasmine.arrayContaining和来获得所需的结果jasmine.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"})
          ])
        })
       ])
    }));
Run Code Online (Sandbox Code Playgroud)

是上述工作代码的jsFiddle。