Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/41.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
Node.js 什么是摩卡同等测试?_Node.js_Testing_Equality_Mocha.js - Fatal编程技术网

Node.js 什么是摩卡同等测试?

Node.js 什么是摩卡同等测试?,node.js,testing,equality,mocha.js,Node.js,Testing,Equality,Mocha.js,我正在用摩卡测试Express Node应用程序。我希望进行以下测试(比较两个空阵列): 通过。但是,摩卡给了我以下错误: AssertionError:[]=[] 要通过比较两个空数组,我应该使用哪种方法?如果要比较对象({}或[]),则必须使用assert.deepEqual(),因为如果使用assert.equal([],[])则只是比较引用:{}=={}(或[]==[]=[])将始终为false 问题在于数组在JavaScript中是引用类型,因此只比较引用。当然,如果创建两个相互独立的

我正在用摩卡测试Express Node应用程序。我希望进行以下测试(比较两个空阵列):

通过。但是,摩卡给了我以下错误:
AssertionError:[]=[]


要通过比较两个空数组,我应该使用哪种方法?

如果要比较对象({}或[]),则必须使用
assert.deepEqual()
,因为如果使用
assert.equal([],[])
则只是比较引用:
{}=={}
(或
[]==[]=[]
)将始终为false


问题在于数组在JavaScript中是引用类型,因此只比较引用。当然,如果创建两个相互独立的不同空数组,则它们是两个不同的对象,具有两个不同的引用

这就是测试失败的原因

您对对象基本上有相同的问题(没有深度相等),尽管您通常对两个对象是否相同不感兴趣,而是对它们的内容是否相同感兴趣

这就是为什么我写了一个模块来处理这个问题:。这个模块——除了其他一些好东西之外——通过为所有(!)类型提供按值比较和按标识比较来解决这个问题。我想这就是你需要的

当您特别询问mocha的上下文时,我还编写了自己的断言模块,名为,它在内部使用comparejs。作为一个副作用,您可以获得更可读(更流畅)的语法。而不是

assert.equal(foo, bar);
你可以写

assert.that(foo, is.equalTo(bar));
也许这就是你要走的路


PS:我知道Stackoverflow上不需要自我广告,但在这种情况下,我为自己编写的工具只是解决了原始海报的问题。因此,请不要将此答案标记为垃圾邮件。

只检查数组的
长度
是否为0如何?恐怕我需要一对在Mocha中与===和==相对应的方法。在JS中,
[]=[]
false
,原因是。你到底在查什么?非常感谢你的详细回答和模块@AdamNYC nice模块,我刚开始在一个项目中使用它在我的mocha测试中进行比较,而不是使用
节点assertthat
,只是比较js.Sweet!这让我快发疯了!
assert.that(foo, is.equalTo(bar));