1. 程式人生 > 其它 >Jest 測試框架 expect 和 匹配器 matcher 的設計原理解析

Jest 測試框架 expect 和 匹配器 matcher 的設計原理解析

副標題: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的原創文章,盡在:"汪子熙":