第120行給handler.handleError方法注入spy後,第121行代碼flush HTTP Mock request會觸發handler.handleError(的wrap實作)調用。第123行代碼檢測該方法是否真正被調用過。
Angular jasmine單元測試架構裡expect.toHaveBeenCalled的工作原理 首先執行expect(handler.handleError), 給handler.handleError建立一個spec:
Angular jasmine單元測試架構裡expect.toHaveBeenCalled的工作原理 實際上調用currentRunnable的expect方法:
Angular jasmine單元測試架構裡expect.toHaveBeenCalled的工作原理 this指向spec,actual就是被wrap後的方法。使用expectationFactory根據工廠方法建立一個expectation:
Angular jasmine單元測試架構裡expect.toHaveBeenCalled的工作原理
Angular jasmine單元測試架構裡expect.toHaveBeenCalled的工作原理
Angular jasmine單元測試架構裡expect.toHaveBeenCalled的工作原理 執行matcherCompare:
Angular jasmine單元測試架構裡expect.toHaveBeenCalled的工作原理 以下這段檢查說明,調用toHaveBeenCalled的對象必須是一個spied method:
Angular jasmine單元測試架構裡expect.toHaveBeenCalled的工作原理 判斷一個方法是否是spy的邏輯也很簡單,使用instanceof: