如何比较Jasmine中的json对象

时间:2017-03-23 13:32:39

标签: json jasmine bdd jasmine2.0

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

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

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

我们如何检查茉莉花? 如果我们可以使用JSON密钥检查值类型,那就太棒了。

2 个答案:

答案 0 :(得分:2)

您可以使用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])
}

答案 1 :(得分:0)

在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]]);
    }
  });