テストガイドライン

このテストガイドは、Mocha BDDインターフェイス(describe / it)に基づいています。

主な原則

テストはクリーンな状態から開始する必要があります

つまり、beforeEachの方がbeforeよりも優先されます。各itブロックの実行前にオブジェクトを再インスタンス化します。テストで必要となるすべてのファイルをbeforeEachに作成する(またはfixtures/にコミットする)。各テスト後に、テスト環境に対して行われた副作用をリセットします。

テストは単独で実行できる必要があります

各テストは単独で実行すると合格する必要があります。mocha test.js --grep 'test name'を使用して単一のテストを実行できます。

最もパフォーマンスに影響する操作をスタブします

可能な限り、常にネットワークやその他の長い操作をスタブします。

sinon.jsをスタビングニーズのほとんどに使用します。

命名規則

describeブロックでは、テストするオブジェクト、メソッド/プロパティ、状況グループ(基本的に「この場合」)の3種類の情報をカバーする必要があります。

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'));