Nightwatchは、テストで使用するために標準のbefore/afterおよびbeforeEach/afterEachフックを提供しています。

before、beforeEach、after、afterEach

beforeafterは、それぞれテストスイートの実行前と後に実行され、beforeEachafterEachは、各テストケース(テストステップ)の前と後に実行されます。

すべてのメソッドは、引数として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;
      }
      // ...
    });
  }
};

グローバルテストフック

テストスイートごとのテストフックと同じセットは、テストのスコープ外でもグローバルに使用できます。詳細は、次のセクションを参照してください。