iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 1
0
Modern Web

Nightwatch.js 實務入門經驗分享系列 第 2

[Nightwatch 新手紀實] test case 生命週期

  • 分享至 

  • xImage
  •  

生命週期共有 before、after、beforeEach、afterEach 這四個 hook 當作生命週期的方法,命名很直覺、使用上也很直覺。

新手

我剛開始接觸 NightwatchJs 寫時,一個檔案寫一組生命週期,例如 ./test/xxx.js

module.exports = {
    before () { // xxx.js 開始執行時
        console.log('start test')
    },
    beforeEach(browser, done) { // 下面每個 test case 開始時
        browser
            .maximizeWindow()
        done()
    },
    afterEach(browser, done) { // 下面每個 test case 結束時 
        done();
    },
    after(){ // xxx.js 結束執行時
        console.log('end test')
    }
    
    'A. 測試 ooo 情境': (browser) => { 
        ......
    },
    'B. 測試 ### 情境': (browser) => { 
        ......
    },
}

像這樣,因為還不熟,怕不同檔案的生命週期有所不同。

/images/emoticon/emoticon37.gif


進步

後來發現生命週期的內容都差不多,真的可以像 官網部落客 教的,一個專案寫一個生命週期,模組化成一個檔案 (這邊舉例命名為 globals.js

先在 nightwatch.conf.js 關聯:

const config = {
  ...
  globals_path: './test/globals.js', // 看檔案路徑放哪裡,檔案名稱可自訂
  ...
}

然後 ./test/globals.js 檔案:

    before () { // 當每個 xxx.js 開始執行時
        console.log('start test')
    },
    beforeEach(browser, done) { // 子 test case 開始時
        browser
            .maximizeWindow()
        done()
    },
    afterEach(browser, done) { // 子 test case 結束時 
        done()
    },
    after(){ // 當每個 xxx.js 結束執行時
        console.log('end test')
    }

之後,要寫 test case 時,就可以省略生命週期的宣告,例如剛才開頭舉例的 ./test/xxx.js 就只剩下簡潔的:

module.exports = {
    'A. 測試 ooo 情境': (browser) => { 
        ......
    },
    'B. 測試 ### 情境': (browser) => { 
        ......
    },
}

/images/emoticon/emoticon34.gif


待思考

  • 什麼樣的情況會需要不同的生命週期?目前只想到做不同的視窗大小的測試的話(setWindowSize()),衍生思考是不是可以模組化 RWD 的測試?

  • 目前主要在用 beforeEach 和 afterEach,before 和 after 只拿來用 console.log,不知道有沒有更好地利用?


上一篇
[Nightwatch 新手紀實] 目的動機
下一篇
[Nightwatch 新手紀實] 好想用 es6!Babel
系列文
Nightwatch.js 實務入門經驗分享4
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言