【问题标题】:Node Mocha / Chai Unit Tests - Compare array of objects regardless of orderNode Mocha / Chai 单元测试 - 比较对象数组而不考虑顺序
【发布时间】: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


    【解决方案1】:

    试试这个:

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

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

    【讨论】:

    • 谢谢,这确实有效,但如果测试失败,它不会显示差异(如深度包含),有没有办法强制这样做?
    • @Mankind1023 我不认为这是可能的:(
    猜你喜欢
    • 1970-01-01
    • 2013-07-10
    • 2016-12-25
    • 2023-04-11
    • 1970-01-01
    • 2018-02-13
    • 1970-01-01
    • 2018-11-05
    • 1970-01-01
    相关资源
    最近更新 更多