Nightwatch 提供標準的 before/afterbeforeEach/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()、"step one"、afterEach()beforeEach()、"step two"、afterEach()after()

非同步 before[Each] 和 after[Each]

所有 before[Each]after[Each] 方法也可以執行非同步操作,在這種情況下,它們需要將 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;
      }
      // ...
    });
  }
};

全域測試鉤子

與每個測試套件相同的測試鉤子集也以全域方式提供,在測試範圍之外。有關詳細資訊,請參閱下一節。