テストフックの使用
Nightwatchは、テストで使用するために標準のbefore
/after
およびbeforeEach
/afterEach
フックを提供しています。
before、beforeEach、after、afterEach
before
とafter
は、それぞれテストスイートの実行前と後に実行され、beforeEach
とafterEach
は、各テストケース(テストステップ)の前と後に実行されます。
すべてのメソッドは、引数としてNightwatchインスタンスを受け取ります。
例
module.exports = {
before : function(browser) {
console.log('Setting up...');
},
after : function(browser) {
console.log('Closing down...');
},
beforeEach : function(browser) {
},
afterEach : function(browser) {
},
'step one' : function (browser) {
browser
// ...
},
'step two' : function (browser) {
browser
// ...
.end();
}
};
上記の例では、メソッド呼び出しの順序は次のようになります。before()、beforeEach()、「ステップ1」、afterEach()、beforeEach()、「ステップ2」、afterEach()、after()
。
非同期before[Each]およびafter[Each]
すべてのbefore[Each]
およびafter[Each]
メソッドは、非同期操作を実行することもできます。この場合、2番目の引数として渡されるcallback
が必要です。
done
関数は、非同期操作が完了したときに最後のステップとして**必ず呼び出す**必要があります。呼び出しないと、タイムアウトエラーが発生します。beforeEachとafterEachの例
module.exports = {
beforeEach: function(browser, done) {
// performing an async operation
setTimeout(function() {
// finished async duties
done();
}, 100);
},
afterEach: function(browser, done) {
// performing an async operation
setTimeout(function() {
// finished async duties
done();
}, 200);
}
};
done
呼び出しタイムアウトの制御
デフォルトでは、done
呼び出しタイムアウトは10秒(ユニットテストの場合は2秒)に設定されています。場合によっては、これが十分でない場合があり、タイムアウトエラーを回避するために、外部グローバルファイルにasyncHookTimeout
プロパティ(ミリ秒単位)を定義することで、このタイムアウトを増やすことができます(外部グローバルの詳細は以下を参照)。
例については、提供されているglobalsModuleの例を参照してください。
テストを明示的に失敗させる
テストフックで意図的にテストを失敗させるには、Error
引数を指定してdone
を呼び出します。
module.exports = {
afterEach: function(browser, done) {
// performing an async operation
performAsync(function(err) {
if (err) {
done(err);
return;
}
// ...
});
}
};
グローバルテストフック
テストスイートごとのテストフックと同じセットは、テストのスコープ外でもグローバルに使用できます。詳細は、次のセクションを参照してください。