我正在使用 Mocha 测试 Express Node 应用程序。我想进行以下测试(比较两个空数组):
assert.equal [], []
通过。但是,摩卡给了我以下错误:
AssertionError: [] == []
我应该使用哪种方法来比较两个空数组以通过?
如果您要比较对象({} 或 []),则必须使用assert.deepEqual()
,因为如果这样做,assert.equal([], [])
您只是在比较引用:({} === {}
或[] === []
)将始终为 false。
http://nodejs.org/api/assert.html#assert_assert_deepequal_actual_expected_message
问题是数组是 JavaScript 中的引用类型,因此只比较引用。当然,如果您创建两个彼此独立的不同空数组,它们是两个不同的对象,并且有两个不同的引用。
这就是测试失败的原因。
您基本上对对象有相同的问题(没有进行深度相等),尽管您通常对两个对象是否相同不感兴趣,但它们的内容是否相同。
这就是为什么我写了一个模块来处理这个问题:comparejs。这个模块 - 除了其他一些好东西 - 通过为所有(!)类型提供按值比较和按身份比较来解决这个问题。我想这就是你需要的。
当您特别询问 mocha 的上下文时,我还编写了自己的断言模块,称为node-assertthat,它在内部使用了 comparejs。作为副作用,您可以获得更易读(更流畅)的语法。代替
assert.equal(foo, bar);
你可以写
assert.that(foo, is.equalTo(bar));
也许这可能是你要走的路。
PS:我知道在 Stackoverflow 上不需要自我广告,但在这种情况下,我为自己编写的工具只是解决了原始发布者的问题。因此,请不要将此答案标记为垃圾邮件。