【问题标题】:How to compare json object in Jasmine如何比较 Jasmine 中的 json 对象
【发布时间】:2017-03-23 13:32:38
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: json jasmine bdd jasmine2.0


    【解决方案1】:

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

    【讨论】:

    • 它给出了 'Expected ['key1', 'key2'] 包含 ['key1', 'key2']。当我写相同的代码时
    【解决方案2】:

    扩展了 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]]);
        }
      });
    

    【讨论】:

      猜你喜欢
      • 2013-03-07
      • 2014-05-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-25
      • 2017-11-29
      • 2022-01-03
      • 2015-07-17
      相关资源
      最近更新 更多