2017-06-02 43 views
1

我想做一些单元测试比较数组的结果数组它应该看起来像,不幸的是结果来自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); 
} 

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

回答