簡體   English   中英

郵遞員:如何斷言所有數組元素都存在於另一個數組中?

[英]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' } }) 

我想要的是,如果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 }, { "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

});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM