【发布时间】:2017-11-04 06:27:15
【问题描述】:
我正在尝试进行一些单元测试,将结果数组与它应该看起来的数组进行比较,不幸的是,结果来自一个有延迟的 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 中,并在错误时使用 deep contains:
try{
expect(a).to.have.deep.members(b);
}catch(e){
expect(a).to.deep.equal(b);
}
如果第一个测试失败,它会运行第二个测试,第二个测试也会失败,但会打印出差异。
【问题讨论】:
标签: node.js unit-testing mocha.js chai