[英]Chai - check 2 objects arrays have same title
假设我有2个包含对象的数组:
var aArray = [ { title: 'Abc', price: '1,200' }, { title: 'def', price: '900' } ]
var bArray = [ { title: 'def', price: '900', other: 'someDetail' }, { title: 'Abc', price: '1,200', other: 'someDetail' } ]
我如何验证它们在每个数组中具有相同的标题值,即使它们的排列顺序不同?
我可以使用类似的东西吗?
expect(aArray.title).to.deep.equal(bArray.title)
然后对于匹配的标题项目,我要检查两者之间的价格是否相同。
我也尝试过expect(cart).to.deep.include.members(cart2).but.not.own.deep.include.property('someDetail');
我认为您可以从这两个数组中获得所有标题。
并使用eql进行比较。
var aArray = [ { title: 'Abc', price: '1,200' }, { title: 'def', price: '900' } ]
var bArray = [ { title: 'def', price: '900', other: 'someDetail' }, { title: 'Abc', price: '1,200', other: 'someDetail' } ]
var aTitle = aArray.map(item => item.title);
var bTitle = bArray.map(item => item.title);
expect(aTitle).eql(bTitle)
如果您想检查title
和price
是否匹配,目前我认为一种方法会更容易。
您可以将标题和价格组合成字符串并进行比较。
var aArray = [ { title: 'Abc', price: '1,200' }, { title: 'def', price: '900' } ]
var bArray = [ { title: 'def', price: '900', other: 'someDetail' }, { title: 'Abc', price: '1,200', other: 'someDetail' } ]
var aTitle = aArray.map(item => `${item.title}|${item.price}`); // ['Abc|1,200', 'def|900']
var bTitle = bArray.map(item => `${item.title}|${item.price}`);
expect(aTitle).eql(bTitle);
我猜有多种方法可以做到。 这是只需要将bArray
映射到具有所需键(即title
和price
。
然后,您可以将members
与deep
一起使用。 如您所见,不需要数组成员的顺序相同,但是需要相同的键。
const aArray = [ { title: 'Abc', price: '1,200' }, { title: 'def', price: '900' } ] const bArray = [ { title: 'def', price: '900', other: 'someDetail' }, { title: 'Abc', price: '1,200', other: 'someDetail' } ] const newBArray = bArray.map(({ title, price }) => ({ title, price })) try { chai.expect(newBArray).to.have.deep.members(aArray) } catch (e) { console.log("Error!", e) } finally { console.log("Done with execution.") }
<script src="https://cdnjs.cloudflare.com/ajax/libs/chai/4.1.2/chai.min.js"></script>
我已经使用try / catch / finally使代码给出有关发生情况的有效提示。
您可以在数组上使用find()
方法。
find()方法返回满足提供的测试功能的数组中第一个元素的值。 否则返回undefined。
var aArray = [ { title: 'Abc', price: '1,200' }, { title: 'def', price: '900' } ]
var bArray = [ { title: 'def', price: '900' }, { title: 'Abc', price: '1,200' } ]
var sameTitle = true;
aArray.forEach(function(objA){
var titleMatch = bArray.find(function(objB){
return objA.title === objB.title;
})
if(titleMatch === undefined) sameTitle = false;
})
console.log(sameTitle);
您可以使用这种方式进行验证。
var aArray = [ { title: 'Abc', price: '1,200' }, { title: 'def', price: '900' } ]
var bArray = [ { title: 'def', price: '900' }, { title: 'Abc', price: '1,200' } ]
for(i=0;i<aArray.length;i++){
var CheckTitle=aArray[i].title;
for(j=0;j<bArray.length;j++){
var CheckTitle1=bArray[j].title;
if(CheckTitle==CheckTitle1){
alert("same title");
}
else{
alert("diff title");
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.