【问题标题】:chai eql reports equal arrays as differentchai eql 将相等的数组报告为不同的
【发布时间】:2015-01-18 00:56:52
【问题描述】:

我正在一个 node.js 程序中测试一个函数,它应该将一些数据保存到一个 mongo 数据库中。我正在使用 mocha、chai 和 should。

在架构中,我已经定义了要保存的数据

data: [{type: Number, min: 0}]

测试将数组[1,2,3,4,5,6] 保存到数据库中,然后再次finds,并将它找到的内容与保存的数组进行比较。测试是

result.data.should.eql([1,2,3,4,5,6]);

测试结果是

Uncaught AssertionError: expected [1,2,3,4,5,6] 
to deeply equal [ 1, 2, 3, 4, 5, 6 ]

根据this chai.js example,以这种方式比较数组应该可以正常工作。

当我使用result.data.should.deep.include.members([1,2,3,4,5,6]); 测试结果时,测试按预期通过。

谁能向我解释为什么这不起作用?

【问题讨论】:

    标签: javascript arrays mongodb mocha.js chai


    【解决方案1】:

    Mongoose 使用许多自己的方法来装饰数组。当你做console.log(result.data) 时你不会看到这些,但是deep-eql(Chai 用来做深度相等的库)会在做比较时考虑它们。这就是当您使用 .eql() 时测试失败的原因:您将特殊的 Mongoose 阵列与普通的香草阵列进行比较。

    如果你这样做了

    result.data.toJSON().should.eql([1,2,3,4,5,6]);
    

    您的测试将按预期通过。

    .members() 断言通过different code path,这就是它碰巧起作用的原因。

    顺便说一句,对您有用的示例并没有完全按照您的要求进行,它是一个超集测试。你真正想要的是:

    result.data.should.have.members([1,2,3,4,5,6]);
    

    【讨论】:

    • 感谢您的解释:-)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-16
    • 1970-01-01
    • 1970-01-01
    • 2012-10-28
    • 1970-01-01
    • 2015-01-01
    相关资源
    最近更新 更多