首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >assert.equal比assert (assert.ok)有什么优势吗?

assert.equal比assert (assert.ok)有什么优势吗?
EN

Stack Overflow用户
提问于 2015-12-23 17:34:10
回答 3查看 991关注 0票数 0

在这个问题中,我提到了包含在断言核心中的node.js模块。

据我所知,以下两个断言几乎完全相同:

代码语言:javascript
复制
assert.equal(typeof path, "string", "argument 'path' must be a string");
assert(typeof path === "string", "argument 'path' must be a string");

如果失败,两个变体都报告相同的消息:

代码语言:javascript
复制
AssertionError: argument 'path' must be a string

在这种情况下,前者比后者有什么显著的优势吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-12-23 17:47:36

根据测试运行程序框架的不同,assert.equal可能会给您提供更多的描述性错误消息。例如,在这种情况下:

代码语言:javascript
复制
assert.equal(typeof path, "string");
assert(typeof path === "string");

第一次发言将给你一个大意如下的信息:

代码语言:javascript
复制
actual: number
expected: string

这已经告诉您测试用例失败了,因为typeof path是一个number。后者只会打印如下内容:

代码语言:javascript
复制
AssertionError: false == true

另外,请注意,如果要检查严格相等性(===),则应该使用assert.strictEqual而不是assert.equal

票数 3
EN

Stack Overflow用户

发布于 2015-12-23 17:44:23

assert.equal不检查身份,只检查等式。相当于:

代码语言:javascript
复制
assert(typeof path == 'string', "argument 'path' must be a string");

真正等效的是assert.strictEqual,它使用标识运算符===

代码语言:javascript
复制
assert.strictEqual(typeof path, "string", "argument 'path' must be a string");

typeof来说,没有,没有区别。但是,您将遇到其他数据类型的问题:

代码语言:javascript
复制
> assert.equal('test', ['test']);
undefined
> 'test' == ['test']
true
> 'test' === ['test']
false
票数 1
EN

Stack Overflow用户

发布于 2015-12-23 17:48:44

两者都会起作用的。

首先,assert使用强制 ==运算符,而不是 ===

此外,当您阅读大量单元测试或其他人的单元测试时,您将注意重复的语法。当人们写这篇文章的时候你会喜欢的

代码语言:javascript
复制
assert.equal(aValue, anotherValue) // sexy

/** But you will hate people writing this. **/
assert.ok(aValue == anotherValue) // ugly

在第一种情况下,您可以在前9个字母中看到正在检查的条件。你甚至不需要再往前看。在另一种情况下,你必须读20个字母才能知道测试是在检查什么。更多的是隐秘的

而且,assert.equal比assert.ok更能说明您的意图。

假设您正在编写测试集交集的测试。你会读得更好

代码语言:javascript
复制
assert.setIntersect(set1, set2) // wow

assert.ok(setIntersect(set1, set2)); // hm.

总而言之,它的优点是单元测试的可读性(因此是可维护性)。这并不多,但它有助于编写更好理解的代码。

正如alexander所说的,如果不指定消息,那么在测试失败时,您将获得更精确的错误消息。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34440927

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档