Angular单元测试的spyOn使用一例
Spy的核心思路:避免service方法被實際調用!
Spyon兩個參數:
- class instance本身
- 需要被spy的方法名,類型為字符串
如果使用.and.callThrough, 則方法會真正被調用。
如果使用.and.return, 則方法不會被真正調用。
待測試的Component里有一個Observable數組:
通過下面的代碼賦值:
this.checkoutDeliveryService.getSupportedDeliveryModes();checkoutDeliveryService的類型:CheckoutDeliveryService
在單元測試時,我們需要將CheckoutDeliveryService的實際實現隔離開,通過創建MockCheckoutDeliveryService實現。
首先在單元測試里創建一個mockcheckoutDeliveryService實例:
創建一個MockCheckoutDeliveryService類:
class MockCheckoutDeliveryService {loadSupportedDeliveryModes = createSpy();setDeliveryMode = createSpy();getSupportedDeliveryModes(): Observable<DeliveryMode[]> {return of();}getSelectedDeliveryMode(): Observable<DeliveryMode> {return of();}getLoadSupportedDeliveryModeProcess(): Observable<LoaderState<void>> {return of();} }其方法同真實的CheckoutDeliveryService類方法一致,差別在于返回的是空的Observable對象。
在TestBed.configureTestingModule的providers配置里,使用class MockCheckoutDeliveryService來注入CheckoutDeliveryService:
通過TestBed.inject得到mockCheckoutDeliveryService的實例:
使用spyOn代碼將mockCheckoutDeliveryService類的方法getSupportedDeliveryModes的返回值設置成of(mockSupportedDeliveryModes):
這樣,在單元測試執行時,Component調用checkoutDeliveryService的getSupportedDeliveryModes方法時,會自動返回我們在spyOn里指定的值。
要獲取更多Jerry的原創文章,請關注公眾號"汪子熙":
總結
以上是生活随笔為你收集整理的Angular单元测试的spyOn使用一例的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 孤寡青蛙是什么意思
- 下一篇: 微信运动怎么看自己走了几步 微信运动步数