Angular单元测试的spyOn使用一例
Spy的核心思路:避免service方法被實際調(diào)用!
Spyon兩個參數(shù):
- class instance本身
- 需要被spy的方法名,類型為字符串
如果使用.and.callThrough, 則方法會真正被調(diào)用。
如果使用.and.return, 則方法不會被真正調(diào)用。
待測試的Component里有一個Observable數(shù)組:
通過下面的代碼賦值:
this.checkoutDeliveryService.getSupportedDeliveryModes();checkoutDeliveryService的類型:CheckoutDeliveryService
在單元測試時,我們需要將CheckoutDeliveryService的實際實現(xiàn)隔離開,通過創(chuàng)建MockCheckoutDeliveryService實現(xiàn)。
首先在單元測試里創(chuàng)建一個mockcheckoutDeliveryService實例:
創(chuàng)建一個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):
這樣,在單元測試執(zhí)行時,Component調(diào)用checkoutDeliveryService的getSupportedDeliveryModes方法時,會自動返回我們在spyOn里指定的值。
要獲取更多Jerry的原創(chuàng)文章,請關注公眾號"汪子熙":
總結(jié)
以上是生活随笔為你收集整理的Angular单元测试的spyOn使用一例的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 孤寡青蛙是什么意思
- 下一篇: Angular 通过依赖注入机制注入一个