Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/458.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript chai eql将相等数组报告为不同数组_Javascript_Arrays_Mongodb_Mocha.js_Chai - Fatal编程技术网

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

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 [

我正在node.js程序中测试一个函数,该程序应该将一些数据保存到mongo数据库中。我用的是摩卡咖啡,柴和应该

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

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

感谢您的解释:-)