4

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

assert.equal [], []

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

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

4

2 回答 2

20

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

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

于 2013-01-27T09:12:38.737 回答
3

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

这就是测试失败的原因。

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

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

当您特别询问 mocha 的上下文时,我还编写了自己的断言模块,称为node-assertthat,它在内部使用了 comparejs。作为副作用,您可以获得更易读(更流畅)的语法。代替

assert.equal(foo, bar);

你可以写

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

也许这可能是你要走的路。

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

于 2013-01-27T09:47:00.370 回答