Unit Test 單元測試(二)

Josh Hsieh
消失的資顧室
Published in
3 min readDec 13, 2018

--

這次來說明使用 BDD 的方式進行單元測試,使用的環境如下:

  1. Node.js
  2. Chai.js
  3. Cucumber.js

BDD

BDD (Behavior Driven Development) 是 TDD 的進階版,跟 TDD 同樣地先撰寫測試,但是在撰寫測試前還要先寫一份規格,以達成能夠跟非技術人員溝通的目的,以下用 cucumber 套件做示範:

專案配置

創建專案資料夾,並進入專案資料夾,如果不熟悉指令操作,直接用編輯器打開整個資料夾比較方便,並依序用下列指令初始化專案:

1. npm init
(test command: cucumber-js --require-module @babel/register)
2. npm install cucumber @babel/core @babel/preset-env @babel/register chai --save-dev

同樣需要 babel 去支援 ES6 語法

最後在專案資料夾底下新增 .babelrc,內容如下:

{
"presets": [ "@babel/preset-env" ]
}

撰寫規格

跟第一篇一樣以加減函數為範例,在專案資料夾底下新增 features 資料夾,並在裡面新增 cal.feature 檔案,內容如下:

  • Feature (功能) 功能的敘述
  • Scenario (場景) 描述測試案例,並使用 Given (假設) When (當) Then (那麼) And (並且) 詳細說明案例
  • 規格檔案的命名也是推薦跟被測試的功能一樣,副檔名為 .feature,會放置在專案資料夾底下的 features 資料夾裡面
  • .feature 檔案使用 Gherkin 語法,有支援多國語言,預設應為英文,若要使用其他語言要加上 #language: ... 註解,上方分別為中文及英文範例,擇一即可

撰寫測試

使用 npm test ,會出下方結果:

黃色文字搭配問號的意思是此步驟尚未實作,注意:Undefined. Implement with the following snippet:這段文字,下面會直接給測試用的程式碼片段,把這些片段複製下來,並在 features 資料夾底下新增 step_definitions 資料夾,裡面再新增一個 cal.step.js 檔案,最後把程式碼貼上去,然後完成它們,結果如下:

  • 這次斷言的套件使用 Chai,選擇 should 風格的敘述
  • 從 Scenario 中整數會被解析成 {int} 、雙引號刮起來的文字會被解析成 {string} 並帶入測試用的 callback 當中
  • 無需定義重複的測試步驟
  • 步驟的命名方式相同,副檔名為 .step.js,會放置在專案中 features/step_definitions 底下

撰寫功能

在專案資料夾底下新增 cal.js 檔案,完成 add 跟 minus,內容如下:

最後記得在 cal.step.js 中 import { add, minus } from "../../cal" 就能夠進行測試了,結果如下:

示範程式碼:https://github.com/jtr860830/UnitTest_Example_BDD

單元測試的部分到此告一段落,未來應該會再講到系統測試,敬請期待。下一篇可能會寫關於 zsh 或是 vim 客製化設定的入門,同樣地,歡迎指正文章內容的錯誤!

--

--