使用測試鉤子
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()
、"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;
}
// ...
});
}
};
全域測試鉤子
與每個測試套件相同的測試鉤子集也以全域方式提供,在測試範圍之外。有關詳細資訊,請參閱下一節。