Javascript chai eql将相等数组报告为不同数组
我正在node.js程序中测试一个函数,该程序应该将一些数据保存到mongo数据库中。我用的是摩卡咖啡,柴和应该 在模式中,我定义了要保存为的数据Javascript chai eql将相等数组报告为不同数组,javascript,arrays,mongodb,mocha.js,chai,Javascript,Arrays,Mongodb,Mocha.js,Chai,我正在node.js程序中测试一个函数,该程序应该将一些数据保存到mongo数据库中。我用的是摩卡咖啡,柴和应该 在模式中,我定义了要保存为的数据 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 [
data: [{type: Number, min: 0}]
测试将数组[1,2,3,4,5,6]
保存到数据库中,然后find
s再次查找它,并将它找到的内容与保存的数组进行比较。测试是
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 ]
据介绍,以这种方式比较阵列应该可以正常工作
当我用result.data.should.deep.include.members([1,2,3,4,5,6])测试结果时代码>,测试按预期通过
有人能给我解释一下为什么这不起作用吗?Mongoose用许多自己的方法装饰数组。当你做<代码>控制台.log(结果。数据)< />代码时,你将看不到这些,但是(CI使用的深度相等的库)在进行比较时会考虑它们。这就是使用.eql()
时测试失败的原因:您正在将一个特殊的Mongoose数组与普通数组进行比较
相反,如果你这样做了
result.data.toJSON().should.eql([1,2,3,4,5,6]);
你的考试会如你所料通过的
.members()
断言经过了一个过程,这就是为什么它会正常工作的原因
顺便说一句,这个为你工作的例子并不是你想要的,它是一个超集测试。你真正想要的是:
result.data.should.have.members([1,2,3,4,5,6]);
感谢您的解释:-)