Angular单元测试的spyOn使用一例

发表于:2021-7-09 09:57

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:JerryWang_sap    来源:掘金

  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里指定的值。

  本文内容不用于商业目的,如涉及知识产权问题,请权利人联系51Testing小编(021-64471599-8017),我们将立即处理
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号