节点Mocha / Chai单元测试 - 无论顺序如何,都要比较对象数组

时间:2017-06-02 19:00:29

标签: node.js unit-testing mocha chai

我正在尝试进行一些单元测试,将结果数组与它应该看起来的数组进行比较,不幸的是,结果来自具有延迟的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中的顺序,是否可能?

更新 这有点像黑客,但它可能会有所帮助,如果有人需要它,你可以把整个东西放在try / catch和错误使用深度包含:

try{
    expect(a).to.have.deep.members(b);
}catch(e){
    expect(a).to.deep.equal(b);
}

如果第一次测试失败,它会运行第二次测试但也会失败,但会打印出差异。

1 个答案:

答案 0 :(得分:0)

试试这个:

expect(a).to.have.deep.members(b)

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