日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Angular单元测试框架里API toHaveBeenCalledTimes的工作原理

發布時間:2023/12/19 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Angular单元测试框架里API toHaveBeenCalledTimes的工作原理 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

看這樣一段代碼:

let spiedFirstFocusable = spyOn(keyboardFocusService,'findFirstFocusable').and.returnValue(el);fixture.detectChanges();expect(document.activeElement.id).toEqual('a');expect(spiedFirstFocusable).toHaveBeenCalledTimes(ELEMENT_FOCUSED_TIME);

spiedFirstFocusable是spyOn方法針對實例keyboardFocusService的findFirstFocusable方法進行監控后返回的句柄。借助該句柄,我們可以使用toHaveBeenCalledTimes方法,得到其在單元測試過程中實際調用的次數。

expect方法:基于傳入的spec創建一個expectation. 在我們的例子里,傳入的spec就是keyboardFocusService.findFirstFocusable被spy之后的版本:

Expectation通過工廠方法創建,該工廠方法接受兩個參數,第一個參數為spied method handle:

第二個參數為單元測試代碼運行的spec信息,即下圖高亮代碼:

Expectation工廠方法的實現細節,我們可以略過:

toHaveBeenCalledTimes的函數體是之前wrapSyncCompare包裹函數返回的一個閉包:

待compare的業務邏輯寫在函數matcherFactory里:

以后我們可以直接在函數toHaveBeenCalledTimes里設置斷點調試。

  • 檢查傳入的actual是否是一個spied后的函數。
  • 將檢查結果設置成默認值false.
  • 檢查傳入的期望調用次數的值的數據類型是否是Number
  • Spied版本的函數調用明細,存儲在CallTracker的calls屬性里:

    這個數組里包含的監控到的方法調用信息有:

  • 方法調用的輸入參數
  • 調用方法的實例對象
  • 調用方法的返回參數
    "get the number of invocations of this spy"的實現方法:calls.length
  • 如果calls.length和傳入的期望值expected相等,說明匹配成功,返回success結果:

    更多Jerry的原創文章,盡在:“汪子熙”:

    總結

    以上是生活随笔為你收集整理的Angular单元测试框架里API toHaveBeenCalledTimes的工作原理的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。