讀 Jest Doc - 斷言庫
¶讀 Jest Doc - 斷言庫
上一回,處理了環境建置,還沒有辦法執行 jest 的朋友們,可以看看上一週的內容哦
這一回,我們要來看看如何判斷測試對錯。
¶測試 3A
在正式介紹之前先說一下測試3A的概念。這並不是什麼評等的 AAA,而是一種測試程式的固定 pattern ,每一個測試,都應該要有的三個部份,而這三個部份都是由英文開頭的所以稱為測試 3A[1]
如果以煮菜來解釋
- Arrange: 準備材料
- Act: 煮東西
- Assert: 試吃,看看結果如何?
const { |
命名參考數學名詞中英文對照
¶Using Matchers
一般來說,這個環節稱為「斷言庫」,也就是 ASSERT 這個術語。
也就是來自測試 3A 的第 3A - assert
大多數的斷言庫,都會出現「BDD style」的選項,在 Jest 這裡是 BDD only 所以不特別描述這件事。
因為 BDD 的宗旨大概是「為產品行為寫測試」[2]所以,測試項目的程式碼理論上就產品驗收標準綁在一起。[3]
所以,如果寫得語意化,非工程師人員,應該也可以看得懂了吧? 就這樣產生了 BDD 的 assertion
在 BDD 出現的時間點,斷言庫也才變成了現在這個「語意化」的樣貌。
想看看有區別斷言庫風格的套件,可以參考 Chai 的 assertion style 介紹
接下來看看 Jest 為了測試判斷正確,準備了哪些基本的入門款給我們吧!
¶Common Matchers
¶測試 Number
test('測試: 2 + 2 = 4', () => { |
¶測試 Object
test('object assignment', () => { |
¶反邏輯
test('測試: 1~9 任意相加 不是 0', () => { |
¶Truthiness
¶null 轉成 Boolean
// null === null |
¶0 轉成 Boolean
// 0 !== null |
¶Numbers
const value = 2 + 2; |
¶浮點數
因為浮點誤差,所以要用夾擊的,但你可以指定夾擊終點。
const value = 0.1 + 0.2; |
¶Strings
用正規表達式 + toMatch
expect('team').not.toMatch(/I/); |
¶Arrays and iterables
在 Array 可以查「包含某元素」
const shoppingList = [ |
¶Exceptions
拋出例外,也可以測試。超好用。
在這要注意,放在 expect
裡的,是一個 callback,由 expect
代替你執行。
function compileAndroidCode() { |
如果你需要參數,可以建立 arrow function 當作 callback 等待被 expect
呼叫。
並且在執行 callback 時,會執行待測 function 就可以順利的拋出 exception 囉
function compileAndroidCode(param) { |
我自己測試時,非同步的 function 若要拋出 exception 不適合這樣做。
我自己的做法,還是老老實實的寫一個 try-catch 將待測物寫在 try
裡,而 expect
則寫在 catch
裡。
¶JSON Schema
另外,如果只是要確定欄位的結構是否正確,可以試看看 JSON Schema 哦
npm install --save-dev jest-json-schema |
¶再學一個 Jest 指令參數
在測試程式剛寫幾個時, Jest 會幫你印出你的測試項目,並且寫上是否正確,這份文件非常適合提交給客戶。 (並且再多收一筆可靠度的費用)
但是,卻在寫了更多的測試之後,這個報告卻自動的不見了!怎辦?
這時要知道 Jest 有準備一個參數 --verbose
讓它印出來。
Is there an option to show all test descriptions when I run jest tests?
jest --verbose |
¶下回見
喜歡的話歡迎訂閱、按讚、分享。
有任何問題也歡迎在下方留言討論。
如果想參加聚會的話,可以私訊給我哦~
我們下一篇見