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)

文档:http://chaijs.com/api/bdd/#method_members