gpt4 book ai didi

javascript - chai eql 将相等数组报告为不同

转载 作者:可可西里 更新时间:2023-11-01 09:57:04 26 4
gpt4 key购买 nike

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

在模式中,我定义了要保存的数据

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

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

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]); 测试结果时,测试按预期通过.

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

最佳答案

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]);

关于javascript - chai eql 将相等数组报告为不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27034942/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com