Nightwatch101 #15:External Globals

Nightwatch.js

隨著測試環境和加入功能愈來愈多元複雜,設定檔 nightwatch.conf.js 漸漸的就變成了一個龐然大物。

大怪物來了 (☉д⊙)

大怪物來了

來幫設定檔減肥 + 美化吧! (ノ◕ヮ◕)ノ*:・゚✧

本系列文章皆使用這個專案,可以拉下來玩玩;有什麼問題都可以提出 issue


通常我們會把要用的全域設定放到一個外部檔案再一併載入,而不是直接放到 nightwatch.conf.js 裡面。意即,在 globals.js 中定義需要用到的資料,然後在 nightwatch.conf.js 中的 globals_path 設定其路徑而引用。

像是這樣…一步步來完成瘦身計劃…(關於瘦身或健身,網襪工程師有很多心得體悟想要跟大家分享,有興趣的可以來看看)

Step 1:整理外部檔案

在這裡將鉤子(Test Hooks)移到 globals.js 來放置(當然還有很多東西可以移啦)。

module.exports = {
  before: function(done) {
    console.log('Before all test suites...');
    done();
  },
  after: function(done) {
    console.log('After all test suites...');
    done();
  },
  beforeEach: function(browser, done) {
    console.log('Before each test suite...');
    done();
  },
  afterEach: function(browser, done) {
    console.log('After each test suite...');
    done();
  }
};

看完整範例

之前我們在每個測試程式中設定其 before[Each] 與 after[Each] Hooks,但針對每個 Test Suite 所做的 Hooks 設定也可在全域設定中完成。注意! 這裡的 beforeEach 和 afterEach 不是針對 Test Case(Test Step),而是 Test Suite,即每個測試檔案。beforeEach 在跑每一個 Test Suite 前執行,afterEach 在跑每一個 Test Suite 後執行。等等在 Step 3 會有清楚的範例說明。

Step 2:設定外部檔案路徑

接著,在 nightwatch.conf.jsglobals_path 設定 globals.js 的引用路徑。

const config = {
  "globals_path": './globals.js', // 引用外部檔案
  "selenium": {
    // 省略...
  },
  "test_settings": {
    // 省略...
  }
}

module.exports = config;

看完整範例

External Globals 的設定可被 nightwatch.conf.jstest_settings 所覆寫。

Step 3:跑測試

執行兩支測試程式-testDemo.js 和 testMainCategory.js。

nightwatch ./test/e2e/testDemo.js ./test/e2e/class/testMainCategory.js

執行結果如下

External Globals - Hooks

總結

我們會將複雜的運算放到這支外部檔案 globals.js 中,像是鉤子、測試報告所用的 HTML Reporter、環境參數相關設定等,目的是設定檔會比較乾淨整齊,複雜的判斷運算就包給外部檔案吧(點此看 globals.js)。

最後, nightwatch.conf.js 就瘦身完成、清潔溜溜了 。:.゚ヽ(*´∀`)ノ゚.:。


2018 鐵人賽網址


Nightwatch End-to-End Testing 端對端測試 自動化測試 Nightwatch101 Selenium 鐵人賽 2018鐵人賽 Nightwatch101 2018 iT 邦幫忙鐵人賽 系列文