# [Nightwatch 新手紀實] test case 生命週期 > 生命週期共有 [before、after、beforeEach、afterEach](https://nightwatchjs.org/guide/#using-before-each-and-after-each-hooks) 這四個 [hook](https://whatis.techtarget.com/definition/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](/images/emoticon/emoticon37.gif) --- ## 進步 後來發現生命週期的內容都差不多,真的可以像 [官網](https://github.com/nightwatchjs/nightwatch/blob/master/examples/globalsModule.js)、[部落客](https://github.com/cythilya/nightwatch101/blob/master/globals.js) 教的,一個專案寫一個生命週期,模組化成一個檔案 (這邊舉例命名為 **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](/images/emoticon/emoticon34.gif) --- ## 待思考 * 什麼樣的情況會需要不同的生命週期?目前只想到做不同的視窗大小的測試的話(setWindowSize()),衍生思考是不是可以模組化 RWD 的測試? * 目前主要在用 beforeEach 和 afterEach,before 和 after 只拿來用 console.log,不知道有沒有更好地利用?