2016-11-10 79 views
4

我正在学习使用mochaassert模块在Node.js中进行测试。 assert有这几种方法:为什么Node.js Assert没有notOk()方法?

assert.equal(); 
assert.deepEqual(); 
assert.deepStrict(); 
assert.strict(); 
assert.ok(); // Is the value true? 

然后有一些对立:

assert.notEqual(); 
assert.notDeepEqual(); 
assert.notDeepStrict(); 
assert.notStrict(); 

但还有一人失踪......为什么会出现没有一个用于测试的notOk()方法,如果结果值为false或不?

这让我想,也许有我丢失的东西对一般的单元测试,因为也许我应该永远只能是测试如果值为true,从来没有虚假根本...

现在,我只是做了这个测试falsey陈述:

assert.ok(!myValue); 

这是你应该怎么做?再次,为什么不存在只有notOk()方法,因为所有其他方法都有not版本?

+0

您还可以检查出柴断言库更多的方法;他们有一个'isNotOk'函数:http://chaijs.com/api/assert/#method_isnotok – hackerrdave

回答

2

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

应该注意的是,虽然该函数被称为ok(),但这并不意味着它期望从您的代码获得true值。它期待着你想要测试真实性的陈述。所以,当你的!myValue使用是有效的,我觉得写这将是更为合适:

assert.ok(myValue === false); 

以上是有道理的语义,你还在测试你的表达感实性,它只是恰巧你是期待它是错误的。包含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; 
+0

如果你打算使用'assert.ok(myValue === false);'那么为什么不直接使用assert。相等(myValue,false);'?我知道它们本质上是一回事。但奇怪的是'.ok()'不存在'.notOk()',因为它与'assert.equal(myValue,true)'相同, –

相关问题