邮递员:如何断言所有数组元素都存在于其他数组中?
Postman : How to assert all array elements exist in other array?
我断言 array1 中的元素是否存在于 array2 中,下面是数组示例,
var array1 = [
{
"name": "appe",
"loc": "war",
"order": 5,
"neck": "NO",
"end": false
},
{
"name": "con",
"loc": "conve",
"order": 15,
"neck": "NO",
"end": true
}]
var array2 = [{"neck":"NO"
"end":true,
"loc":"conve",
"name":"con",
"order":15
}]
我试过的代码 -
const lodash = require("lodash");
for(var i = 0; i < array2.length; i++ )
{
tests['response json contain Data'] = lodash._.has(points, array2[i]);
//pm.expect(array2[i]).to.be.oneOf(array1);
}
我得到错误 -
response json contain Data | AssertionError: expected false to be truthy
编辑
在尝试另一次尝试后 2 -
pm.expect(array2[i]).to.be.oneOf(array1);
错误-
AssertionError | expected { Object (name, loc, ...) } to be one of [ Array(20) ]
尝试 3 -
pm.expect(array1).to.deep.equal(array2);
错误 -
AssertionError | expected [ Array(20) ] to deeply equal [ Array(18) ]
我做错了什么?我想要的是,如果 array2 中的任何一个元素不在 array1 中,它应该失败。
谢谢
var array1 = [{
"name": "appe",
"loc": "war",
"order": 5,
"neck": "NO",
"end": false
},
{
"name": "con",
"loc": "conve",
"order": 15,
"neck": "NO",
"end": true
}
]
var array2 = [{
"neck": "NO",
"end": true,
"loc": "conve",
"name": "con",
"order": 15
}]
array2.forEach( item => {
if ( !array1.includes(item)){
throw 'doesn\'t include'
}
})
what I want is if any one element in array2 is not in array1 it should fail
var array1 = [{
"name": "appe",
"loc": "war",
"order": 5,
"neck": "NO",
"end": false
},
{
"name": "con",
"loc": "conve",
"order": 15,
"neck": "NO",
"end": true
}
]
var array2 = [{
"neck": "NO",
"end": true,
"loc": "conve",
"name": "con",
"order": 15
}, {
"neck": "NOo",
"end": true,
"loc": "conve",
"name": "con",
"order": 15
}];
// Finds at least one object on array2 which is not in array1.
// The function some finds at least one according to the
// result of findIndex which is using a handler who executes
// the function every.
// The function every, basically, compares every key-value
// between array2 and array1.
let result = array2.some(o => array1.findIndex(ao => Object.entries(o).every(([key, value]) => ao[key] === value)) === -1);
console.log(result); // Returns true because one element is not in array1
Chai 断言库默认包含在 Postman 的应用程序中。所以你需要使用to.deep.equal
。它将比较嵌套数组和嵌套对象。
解决方案:
pm.test("verify two objects", function () {
var array1 = [{
"name": "appe",
"loc": "war",
"order": 5,
"neck": "NO",
"end": false
},
{
"name": "con",
"loc": "conve",
"order": 15,
"neck": "NO",
"end": true
}];
var array2 = [{
"neck": "NO",
"end": true,
"loc": "conve",
"name": "con",
"order": 15
},
{
"neck": "NOo",
"end": true,
"loc": "conve",
"name": "con",
"order": 15
}];
pm.expect(array1).to.deep.equal(array2); // Failed
pm.expect(array1).to.deep.equal(array1); // Passed
});
我断言 array1 中的元素是否存在于 array2 中,下面是数组示例,
var array1 = [
{
"name": "appe",
"loc": "war",
"order": 5,
"neck": "NO",
"end": false
},
{
"name": "con",
"loc": "conve",
"order": 15,
"neck": "NO",
"end": true
}]
var array2 = [{"neck":"NO"
"end":true,
"loc":"conve",
"name":"con",
"order":15
}]
我试过的代码 -
const lodash = require("lodash");
for(var i = 0; i < array2.length; i++ )
{
tests['response json contain Data'] = lodash._.has(points, array2[i]);
//pm.expect(array2[i]).to.be.oneOf(array1);
}
我得到错误 -
response json contain Data | AssertionError: expected false to be truthy
编辑 在尝试另一次尝试后 2 -
pm.expect(array2[i]).to.be.oneOf(array1);
错误-
AssertionError | expected { Object (name, loc, ...) } to be one of [ Array(20) ]
尝试 3 -
pm.expect(array1).to.deep.equal(array2);
错误 -
AssertionError | expected [ Array(20) ] to deeply equal [ Array(18) ]
我做错了什么?我想要的是,如果 array2 中的任何一个元素不在 array1 中,它应该失败。
谢谢
var array1 = [{
"name": "appe",
"loc": "war",
"order": 5,
"neck": "NO",
"end": false
},
{
"name": "con",
"loc": "conve",
"order": 15,
"neck": "NO",
"end": true
}
]
var array2 = [{
"neck": "NO",
"end": true,
"loc": "conve",
"name": "con",
"order": 15
}]
array2.forEach( item => {
if ( !array1.includes(item)){
throw 'doesn\'t include'
}
})
what I want is if any one element in array2 is not in array1 it should fail
var array1 = [{
"name": "appe",
"loc": "war",
"order": 5,
"neck": "NO",
"end": false
},
{
"name": "con",
"loc": "conve",
"order": 15,
"neck": "NO",
"end": true
}
]
var array2 = [{
"neck": "NO",
"end": true,
"loc": "conve",
"name": "con",
"order": 15
}, {
"neck": "NOo",
"end": true,
"loc": "conve",
"name": "con",
"order": 15
}];
// Finds at least one object on array2 which is not in array1.
// The function some finds at least one according to the
// result of findIndex which is using a handler who executes
// the function every.
// The function every, basically, compares every key-value
// between array2 and array1.
let result = array2.some(o => array1.findIndex(ao => Object.entries(o).every(([key, value]) => ao[key] === value)) === -1);
console.log(result); // Returns true because one element is not in array1
Chai 断言库默认包含在 Postman 的应用程序中。所以你需要使用to.deep.equal
。它将比较嵌套数组和嵌套对象。
解决方案:
pm.test("verify two objects", function () {
var array1 = [{
"name": "appe",
"loc": "war",
"order": 5,
"neck": "NO",
"end": false
},
{
"name": "con",
"loc": "conve",
"order": 15,
"neck": "NO",
"end": true
}];
var array2 = [{
"neck": "NO",
"end": true,
"loc": "conve",
"name": "con",
"order": 15
},
{
"neck": "NOo",
"end": true,
"loc": "conve",
"name": "con",
"order": 15
}];
pm.expect(array1).to.deep.equal(array2); // Failed
pm.expect(array1).to.deep.equal(array1); // Passed
});