Jest 測試框架 expect 和 匹配器 matcher 的設計原理解析
阿新 • • 發佈:2021-10-02
副標題:SAP Spartacus SSR 優化的單元測試分析之二 - 呼叫引數檢測
原始碼:
it(`should pass parameters to the original engine instance`, () => {
expect(originalEngineInstance).toHaveBeenCalledWith(
mockPath,
mockOptions,
mockCallback
);
});
注意觀察 jest.Expect 的返回值:型別為 jest.JestMatchersShape
單步除錯 expect 的呼叫過程:
從註釋看,該函式為 spec 建立一個 expectation, 傳入的 actual 為 spy 之後的版本。
構造一個 expectation,需要以上的引數。
緊接著呼叫 toHaveBeenCalledWith:
支援的所有方法,在 Chrome 開發者工具裡能夠看到:
toHaveBeenCalledWith
執行到這裡來了:
所有可用的匹配器 matchers,都定義在檔案 jasmine.js 裡:
因此,toHaveBeenCalledWith 也算匹配器 matchers 之一。
構造一個匹配器例項:
呼叫匹配器工廠,構造一個匹配器例項:
其例項的執行程式碼如下圖所示:
比較實際被呼叫的引數,是否和期望被呼叫的引數完全一致。
進入陣列的比較分支:
更多Jerry的原創文章,盡在:"汪子熙":