什么是Mocha同等测试?

时间:2013-01-27 02:56:29

标签: node.js testing equality mocha

我正在使用Mocha测试Express Node应用程序。我想进行以下测试(比较两个空数组):

assert.equal [], []

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

我应该使用哪种方法来比较两个空数组来传递?

2 个答案:

答案 0 :(得分:18)

如果您要比较对象({}或[]),则必须使用assert.deepEqual(),因为如果您执行assert.equal([], []),则只需比较引用:{} === {}(或{ {1}})总是假的。

http://nodejs.org/api/assert.html#assert_assert_deepequal_actual_expected_message

答案 1 :(得分:3)

问题是数组是JavaScript中的引用类型,因此只比较引用。当然,如果你创建两个不同的空数组,它们是两个不同的对象,有两个不同的引用。

这就是测试失败的原因。

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

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

由于您特别要求mocha的上下文,我还编写了自己的assert-module,称为node-assertthat,它在内部使用了comparejs。作为副作用,您可以获得更易读(更流畅)的语法。而不是

assert.equal(foo, bar);

你可以写

assert.that(foo, is.equalTo(bar));

也许这可能是您前进的方式。

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