このテストガイドは、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'));