前言
本文主要介紹的是關于利用Jasmine對Angular單元測試的相關內容,以下是我假定那些極少或壓根沒寫單元測試的人準備的,因此,會白話解釋諸多概念性問題,同時會結合 Jasmine 與之對應的方法進行講解。
一、概念
Test Suite
測試套件,哪怕一個簡單的類,也會有若干的測試用例,因此將這些測試用例集合在一個分類下就叫Test Suite。
而在 Jasmine 就是使用 describe 全局函數來表示,它的第一個字符串參數用來表示Suite的名稱或標題,第二個方法參數就是實現Suite代碼了。
describe('test suite name', () => {});Specs
一個Specs相當于一個測試用例,也就是我們實現測試具體代碼體。
Jasmine 就是使用 it 全局函數來表示,和 describe 類似,字符串和方法兩個參數。
而每個 Spec 內包括多個 expectation 來測試需要測試的代碼,只要任何一個 expectation 結果為 false 就表示該測試用例為失敗狀態。
describe('demo test', () => { const VALUE = true; it('should be true', () => { expect(VALUE).toBe(VALUE); })});Expectations
斷言,使用 expect 全局函數來表示,只接收一個代表要測試的實際值,并且需要與 Matcher 代表期望值。
二、常用方法
Matchers
斷言匹配操作,在實際值與期望值之間進行比較,并將結果通知Jasmine,最終Jasmine會判斷此 Spec 成功還是失敗。
Jasmine 提供非常豐富的API,一些常用的Matchers:
toBe() 等同 === toNotBe() 等同 !== toBeDefined() 等同 !== undefined toBeUndefined() 等同 === undefined toBeNull() 等同 === null toBeTruthy() 等同 !!obj toBeFalsy() 等同 !obj toBeLessThan() 等同 < toBeGreaterThan() 等同 > toEqual() 相當于 == toNotEqual() 相當于 != toContain() 相當于 indexOf toBeCloseTo() 數值比較時定義精度,先四舍五入后再比較。 toHaveBeenCalled() 檢查function是否被調用過 toHaveBeenCalledWith() 檢查傳入參數是否被作為參數調用過 toMatch() 等同 new RegExp().test() toNotMatch() 等同 !new RegExp().test() toThrow() 檢查function是否會拋出一個錯誤而這些API之前用 not 來表示負值的判斷。
expect(true).not.toBe(false);
這些Matchers幾乎可以滿足我們日常需求,當然你也可以定制自己的Matcher來實現特殊需求。
Setup 與 Teardown
一份干將的測試代碼很重要,因此我們可以將這些重復的 setup 與 teardown 代碼,放在與之相對應的 beforeEach 與 afterEach 全局函數里面。
beforeEach 表示每個 Spec 執行之前,反之。
describe('demo test', () => { let val: number = 0; beforeEach(() => { val = 1; }); it('should be true', () => { expect(val).toBe(1); }); it('should be false', () => { expect(val).not.toBe(0); });});
新聞熱點
疑難解答
圖片精選