2016-11-10 119 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)'相同, –

相關問題