首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么Node.js断言没有notOk()方法?

为什么Node.js断言没有notOk()方法?
EN

Stack Overflow用户
提问于 2016-11-10 04:43:38
回答 1查看 2.6K关注 0票数 14

我正在学习如何在Node.js中使用mochaassert模块进行测试。assert有以下几种方法:

代码语言:javascript
复制
assert.equal();
assert.deepEqual();
assert.deepStrict();
assert.strict();
assert.ok(); // Is the value true?

还有一些相反的东西:

代码语言:javascript
复制
assert.notEqual();
assert.notDeepEqual();
assert.notDeepStrict();
assert.notStrict();

但有一个失踪了..。为什么没有一个notOk()方法来测试结果值是否为false

这让我想到,也许在一般情况下,我缺少一些基本的单元测试,也许我应该只测试值是否为真,而不是错误的……

现在,我只是为了测试falsey语句而这么做:

代码语言:javascript
复制
assert.ok(!myValue);

你就该这么做吗?同样,为什么没有一个notOk()方法,因为所有其他方法都有一个not版本?

EN

回答 1

Stack Overflow用户

发布于 2016-11-10 04:56:14

如果您查看这些文档,它会注意到.ok(value, message)等同于assert.equal(!!value, true, message)。这似乎只是一个方便的功能。

应该注意的是,虽然函数被称为ok(),但这并不意味着它期望从代码中得到一个true值。它期待一个声明,您想要测试的真实性。因此,虽然您对!myValue的使用是有效的,但我认为编写以下内容更合适:

代码语言:javascript
复制
assert.ok(myValue === false);

上面的内容在语义上是有意义的,因为您仍然在测试表达式的真实性,这恰好是您期望它是假的。包含一个notOk()函数意味着一些含糊不清的含义。Not意味着失败,因此notOk函数的失败可能看起来有点复杂。

至于其他方法有它们的not等价物,我认为该语言仍然有意义。说notEqual意味着你在专门测试一个不平等,而notOk并没有真正的意义。就我个人而言,我不想在一起使用ok(),因为不管怎么说,它本身都很模糊。

如果你真的觉得需要,你也可以写你自己的方便功能。

我认为也值得一提的是,这就是来源:

代码语言:javascript
复制
// 4. Pure assertion tests whether a value is truthy, as determined
// by !!guard.
// assert.ok(guard, message_opt);
// This statement is equivalent to assert.equal(true, !!guard,
// message_opt);. To test strictly for the value true, use
// assert.strictEqual(true, guard, message_opt);.

function ok(value, message) {
    if (!value) fail(value, true, message, '==', assert.ok);
}
assert.ok = ok;
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40520100

复制
相关文章

相似问题

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