Node Mocha / Chai 单元测试 - 比较对象数组而不考虑顺序
Node Mocha / Chai Unit Tests - Compare array of objects regardless of order
我正在尝试进行一些单元测试,将结果数组与它应该看起来的数组进行比较,不幸的是,结果来自 api 延迟,因此对象的顺序并不总是相同,导致测试失败:
简化示例
var a = [
{name: 'Joe', age: 35},
{name: 'Steve', age: 30},
]
//assume we got the result in this order
var b = [
{name: 'Steve', age: 30},
{name: 'Joe', age: 35},
]
expect(a).to.deep.equal(b) //Fails
我目前的解决方法是:
expect(a.length).to.equal(b.length);
for(let item of b){
expect(a).to.deep.contain(item);
}
但我正在寻找一种直接进行深度比较而不考虑 Mocha/Chai 顺序的方法,是否可行?
更新:
这有点 hack,但如果有人需要它可能会有所帮助,您可以将整个事情放在 try / catch 中,并在出错时使用 deep contain:
try{
expect(a).to.have.deep.members(b);
}catch(e){
expect(a).to.deep.equal(b);
}
如果第一个测试失败,它会运行第二个,第二个也会失败,但会打印出差异。
试试这个:
expect(a).to.have.deep.members(b)
我正在尝试进行一些单元测试,将结果数组与它应该看起来的数组进行比较,不幸的是,结果来自 api 延迟,因此对象的顺序并不总是相同,导致测试失败:
简化示例
var a = [
{name: 'Joe', age: 35},
{name: 'Steve', age: 30},
]
//assume we got the result in this order
var b = [
{name: 'Steve', age: 30},
{name: 'Joe', age: 35},
]
expect(a).to.deep.equal(b) //Fails
我目前的解决方法是:
expect(a.length).to.equal(b.length);
for(let item of b){
expect(a).to.deep.contain(item);
}
但我正在寻找一种直接进行深度比较而不考虑 Mocha/Chai 顺序的方法,是否可行?
更新: 这有点 hack,但如果有人需要它可能会有所帮助,您可以将整个事情放在 try / catch 中,并在出错时使用 deep contain:
try{
expect(a).to.have.deep.members(b);
}catch(e){
expect(a).to.deep.equal(b);
}
如果第一个测试失败,它会运行第二个,第二个也会失败,但会打印出差异。
试试这个:
expect(a).to.have.deep.members(b)