我正在学习如何在Node.js中使用mocha和assert模块进行测试。assert有以下几种方法:
assert.equal();
assert.deepEqual();
assert.deepStrict();
assert.strict();
assert.ok(); // Is the value true?还有一些相反的东西:
assert.notEqual();
assert.notDeepEqual();
assert.notDeepStrict();
assert.notStrict();但有一个失踪了..。为什么没有一个notOk()方法来测试结果值是否为false?
这让我想到,也许在一般情况下,我缺少一些基本的单元测试,也许我应该只测试值是否为真,而不是错误的……
现在,我只是为了测试falsey语句而这么做:
assert.ok(!myValue);你就该这么做吗?同样,为什么没有一个notOk()方法,因为所有其他方法都有一个not版本?
发布于 2016-11-10 04:56:14
如果您查看这些文档,它会注意到.ok(value, message)等同于assert.equal(!!value, true, message)。这似乎只是一个方便的功能。
应该注意的是,虽然函数被称为ok(),但这并不意味着它期望从代码中得到一个true值。它期待一个声明,您想要测试的真实性。因此,虽然您对!myValue的使用是有效的,但我认为编写以下内容更合适:
assert.ok(myValue === false);上面的内容在语义上是有意义的,因为您仍然在测试表达式的真实性,这恰好是您期望它是假的。包含一个notOk()函数意味着一些含糊不清的含义。Not意味着失败,因此notOk函数的失败可能看起来有点复杂。
至于其他方法有它们的not等价物,我认为该语言仍然有意义。说notEqual意味着你在专门测试一个不平等,而notOk并没有真正的意义。就我个人而言,我不想在一起使用ok(),因为不管怎么说,它本身都很模糊。
如果你真的觉得需要,你也可以写你自己的方便功能。
我认为也值得一提的是,这就是来源:
// 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;https://stackoverflow.com/questions/40520100
复制相似问题