將斷言新增至測試
概觀
Nightwatch 提供內建的可擴充 assert
/verify
程式庫,作為包含相同方法以對元素執行斷言的兩個命名空間。
.assert
使用 .assert
命名空間時,當斷言失敗時,測試會結束,因此會跳過測試中的所有其他斷言。
下列範例程式碼片段使用 assert
命名空間來判斷類別為 non_existing
的元素是否在頁面上可見。如果斷言失敗,測試會結束
browser.element.find('selector').assert.visible('.non_existing');
.verify
使用 .verify
命名空間時,當斷言失敗時,測試會記錄失敗並繼續測試中的其他斷言。
下列範例程式碼片段使用 verify
命名空間來檢查類別為 non_existing
的元素是否在頁面上可見。如果斷言失敗,則會記錄失敗,並且測試會繼續
browser.verify.visible('.non_existing');
基本斷言
Node.js assert 模組中的方法也可在 .assert
/.verify
命名空間中使用。
否定 (".not") 斷言
從 Nightwatch 版本 1.3 開始,所有斷言 (包括自訂定義的斷言) 都有 ".not"
對應項,可用於判斷相反的條件。
下列範例程式碼片段顯示 ".not"
斷言
describe('Demo .not assertion', function() {
it('demo test', function(browser) {
browser.init();
browser
.element.find('.not_present')
.assert.not.elementPresent();
browser
.assert.not.urlContains('http://');
// ...
})
})
自動重試
依預設,Nightwatch 會自動重試失敗的斷言,最長可達 5000
毫秒。這可以在 nightwatch.json
檔案中的 globals
物件中設定 retryAssertionTimeout
(以毫秒為單位) 屬性來設定。請查看使用測試全域變數以取得更多詳細資料。
如果達到指定的逾時時間,測試執行器會停止重試,並將斷言標記為失敗。
下列範例程式碼片段顯示在組態檔中定義的 retryAssertionTimeout
屬性
{
src_folders: ['tests'],
test_settings: {
default: {
launch_url: 'https://nightwatch.dev.org.tw',
globals: {
myGlobalVar: 'some value',
retryAssertionTimeout: 5000
}
}
}
}
Expect 斷言
除了 assert
命名空間之外,Nightwatch API 還支援開箱即用的 BDD 樣式 expect
斷言程式庫,這大幅提高了斷言的彈性以及可讀性。
expect
斷言使用 Chai 框架中的 Expect
API 的子集,目前可用於元素、Cookie、頁面標題和 URL。
範例
以下是使用各種 expect.element([...])
斷言的基本範例
module.exports = {
'Demo test Ecosia.org': function (browser) {
browser.url('https://www.ecosia.org/');
// expect element header to be present in 1000ms
expect(browser.element.find('header')).to.be.present.before(1000);
browser.end();
}
};
預期特定元素計數
在此範例中,測試預期頁面上存在指定數量的元素,使用 expect.elements([...]).count
斷言
module.exports = {
'demo test ecosia.org'(browser) {
browser
.url('https://www.ecosia.org/')
.expect(browser.element.findAll('section').count()).to.equal(5);
},
after(browser) {
browser.end();
}
};
expect
介面提供更具彈性且流暢的語言來定義斷言,與現有的 assert
介面相比,大幅改進。唯一的缺點是無法再串連斷言。
如需可用 expect
斷言的完整清單,請參閱API 文件。