我想在Jasmine中比较JSON对象的键。 例如:我有两个键的JSON对象,我想检查JSON是否包含via Jasmine。
{
"key1": "value1",
"key2": "Value2"
}
如果我有这个JSON,我想检查JSON是否同时包含key1,key2
我们如何检查茉莉花? 如果我们可以使用JSON密钥检查值类型,那就太棒了。
答案 0 :(得分:2)
您可以使用Object.keys(JSONObj)
从对象获取所有密钥。那么你可以对结果做一个简单的toEqual
或toContain
断言。
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]]);
}
});