測試準則

這個測試指南根據 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'));