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的原創文章,盡在:"汪子熙":
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/24475491/viewspace-2758154/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- JavaScript單元測試框架JavaScript框架
- Google 單元測試框架Go框架
- JUnit測試單元框架框架
- 單元測試框架 mockito框架Mockito
- Angular8單元測試示例指南Angular
- JavaScript單元測試及原理JavaScript
- 單元測試利器Mockito框架Mockito框架
- 前端單元測試框架梳理前端框架
- PHP單元測試框架PHPUnit的使用PHP框架
- Angular單元測試如何只執行指定的測試用例,提高測試速度Angular
- 單元測試模擬框架Mockito框架Mockito
- jest對react單元測試框架React框架
- 單元測試:單元測試中的mockMock
- Go 單元測試之HTTP請求與API測試GoHTTPAPI
- 單元測試如何保證了易用的APIAPI
- 使用Angular CLI進行單元測試和E2E測試Angular
- Netty 框架學習 —— 單元測試Netty框架
- 簡單介紹Angular單元測試之事件觸發的實現Angular事件
- 測試 之Java單元測試、Android單元測試JavaAndroid
- 單元測試階段的測試工作量自動預估
- Python中的單元測試框架:使用unittest進行有效測試Python框架
- 搞定Go單元測試(二)—— mock框架(gomock)GoMock框架
- javascript單元測試框架mochajs詳解JavaScript框架JS
- 44行寫就Ruby單元測試框架框架
- SAP 電商雲 Spartacus UI SSR 單元測試裡的 callFakeUI
- unittest 單元測試框架教程 1-執行測試指令碼框架指令碼
- 使用FakeAsync對Angular非同步程式碼進行單元測試Angular非同步
- GoLang快速上手單元測試(思想、框架、實踐)Golang框架
- c#單元測試:使用Moq框架Mock物件C#框架Mock物件
- Spring框架裡註解@Autowired的工作原理Spring框架
- Java JUnit框架裡@Category註解的工作原理Java框架Go
- Jest基於dva框架的單元測試最佳實踐框架
- api測試框架 GuardianAPI框架
- Python單元測試框架pytest常用測試報告型別Python框架測試報告型別
- Pytest單元測試框架生成HTML測試報告及優化框架HTML測試報告優化
- [iOS單元測試系列]單元測試編碼規範iOS
- Flutter 單元測試Flutter
- Go單元測試Go