這個測試指南根據 Mocha BDD 介面(describe
/ it
)撰寫。
主要原則
測試必須從乾淨狀態開始
這表示優先使用 beforeEach
取代 before
。在執行每個 it
區塊前重新實例化物件。在 beforeEach
中建立測試所需的每個檔案(或提交至fixtures/
)。在每個測試後重設在測試環境中執行的任何副作用。
測試必須能夠單獨執行
如果單獨執行,每個測試必須都通過。您可以使用 mocha test.js --grep 'test name'
來執行單一測試。
存根效能最密集的作業
如果可以,請務必存根網路或其他耗時作業。
我們使用 sinon.js 滿足大多數存根需求。
命名慣例
describe
區塊應涵蓋三種類型的資訊:要測試的物件、方法/屬性、環境群組(基本上,“當這個”)。
it
區塊涵蓋斷言。它們應使用儘可能少的程式碼行數。應有與方法效應上的斷言一樣多的 it
區塊。
實例方法和屬性應以驚嘆號為前綴 (#find()
)。靜態方法和屬性應以點為前綴 (.exclude()
)。
// Given this object
function Class() {
this.args = nopt();
};
Class.exclude = function () {};
Class.name = 'Yeoman';
Class.prototype.find = function () {};
// We'd have this test structure
describe('Class', function () {
describe('.exclude()', function () {});
describe('.name', function () {});
describe('#find()', function () {});
describe('#args', function () {});
});
方法應以括號結束,但不應包括預期參數(應在文件註解中涵蓋參數)。
it
區塊應為宣告式。
// BAD
it('should find generators');
// GOOD
it('find generators');
斷言
除非引發的錯誤不明確指出失敗原因,否則請勿將 message
新增至斷言。
如果您必須新增訊息,請描述預期的結果以及失敗原因。例如:
// BAD
assert(Generator.appname, 'Generator has an `appname` property');
// GOOD
assert(Generator.appname, 'Expected Generator to have an `appname` property');
請記住,這些訊息是與失敗一起引發的錯誤訊息。讓這些訊息在這些情況下有所助益。
風格偏好
.bind()
引發斷言
在測試方法以無效參數引發異常時,請優先將參數繫結至建立匿名函數。
// BAD
assert.throws(function () {
class.method('Invalid param');
});
// GOOD
assert.throws(class.method.bind(class, 'Invalid param'));