使用測試全域變數
Nightwatch 提供的另一個實用概念是測試全域變數。以最簡單的形式來說,它是一個名稱-值配對的字典,定義在您的組態檔中。
全域變數可以定義為 "globals"
屬性,也可以定義為外部檔案,並將其指定為 "globals_path"
屬性。
以下範例使用 nightwatch.json
中的 "globals"
屬性定義:
nightwatch.conf.js
{
"src_folders": [],
"globals": {
"myGlobalVar" : "some value",
"otherGlobal" : "some other value"
},
"test_settings": {
"default": {
"launch_url": "https://nightwatch.dev.org.tw",
}
}
}
與 launch_url
屬性類似,globals
物件會直接在傳遞給測試的 Nightwatch API 上提供。
tests/sampleTest.js
module.exports = {
'Demo test' : function (browser) {
console.log(browser.globals.myGlobalVar); // myGlobalVar == "some value"
}
};
預先定義的全域變數
以下全域屬性可用於控制測試執行器的行為,並以以下預設值定義:
nightwatch/globals.js
module.exports = {
// this controls whether to abort the test execution when an assertion failed and skip the rest
// it's being used in waitFor commands and expect assertions
abortOnAssertionFailure: true,
// this will overwrite the default polling interval (currently 500ms) for waitFor commands
// and expect assertions that use retry
waitForConditionPollInterval: 500,
// default timeout value in milliseconds for waitFor commands and implicit waitFor value for
// expect assertions
waitForConditionTimeout : 5000,
// since 1.4.0 – this controls whether to abort the test execution when an element cannot be located; an error
// is logged in all cases, but this also enables skipping the rest of the testcase;
// it's being used in element commands such as .click() or .getText()
abortOnElementLocateError: false,
// this will cause waitFor commands on elements to throw an error if multiple
// elements are found using the given locate strategy and selector
throwOnMultipleElementsReturned: false,
// By default a warning is printed if multiple elements are found using the given locate strategy
// and selector; set this to true to suppress those warnings
suppressWarningsOnMultipleElementsReturned: false,
// controls the timeout value for async hooks. Expects the done() callback to be invoked within this time
// or an error is thrown
asyncHookTimeout : 10000,
// controls the timeout value for when running async unit tests. Expects the done() callback to be invoked within this time
// or an error is thrown
unitTestsTimeout : 2000,
// controls the timeout value for when executing the global async reporter. Expects the done() callback to be
// invoked within this time or an error is thrown
customReporterCallbackTimeout: 20000,
// Automatically retrying failed assertions - You can tell Nightwatch to automatically retry failed assertions
// until a given timeout is reached, before the test runner gives up and fails the test.
retryAssertionTimeout: 5000,
// Custom reporter
reporter: function(results, done) {
// do something with the results
done(results);
}
}
環境特定的全域變數
與其他測試設定一樣,全域變數能夠針對每個測試環境覆寫。請考慮此組態:
nightwatch.json
{
"src_folders": [],
"test_settings": {
"default": {
"launch_url": "https://nightwatch.dev.org.tw",
"globals": {
"myGlobalVar" : "some value",
"otherGlobal" : "some other value"
}
},
"integration": {
"globals": {
"myGlobalVar" : "integrated global"
}
}
}
}
如果我們仍然將 --env integration
選項傳遞給執行器,那麼我們的全域變數物件將如下所示:
nightwatch --env integration
module.exports = {
'Demo test' : function (browser) {
console.log(browser.globals.myGlobalVar); // myGlobalVar == "integrated global"
}
};