如何比较 Jasmine 中的 json 对象

How to compare json object in Jasmine

我想比较 JSON 对象在 Jasmine 中的键。 例如:我有带有两个键的 JSON 对象,我想检查 JSON 是否包含两个 via Jasmine。

{
"key1": "value1",
"key2": "Value2"
}

如果我有这个 JSON 我想检查 JSON 是否同时包含 key1,key2

我们如何在 Jasmine 中检查它? 如果我们可以用 JSON 键检查值类型,那就太好了。

您可以使用 Object.keys(JSONObj) 从对象中获取所有键。然后你可以对结果做一个简单的 toEqualtoContain 断言。

var obj = {
    "key1": "value1",
    "key2": "Value2"
  };
var expectedKeys = ["key1","key2"];
var keysFromObject = Object.keys(obj);
for(var i=0; i< expectedKeys.length;i++) {
   expect(keysFromObject).toContain(expectedKeys[i])
}

扩展了 Sudharasan 的回答,我写这篇文章是为了测试一个对象的 getter/setter。它从初始设置对象中获取键并使用它来查看这些键,并且只有这些键(和正确的值)在获取的对象上。

  it('should test get/set MyParams', () => {
    let paramObj = {
      key1: "abc",
      key2: "def"
    };
    const objKeys = Object.keys(paramObj);

    myService.setMyParams(paramObj);
    const gottenObj = myService.getMyParams();
    const gottenKeys = Object.keys(gottenObj);

    // check that the 2 objects have the same number of items
    expect(objKeys.length).toEqual(gottenKeys.length);

    // check that a keyed item in one is the same as that keyed item in the other
    for (var i = 0; i < objKeys.length; i++) {
      expect(paramObj[objKeys[i]]).toEqual(gottenObj[objKeys[i]]);
    }
  });