Angular Observable数据类型的单元测试数据准备

发表于:2021-7-28 09:50

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

 作者:JerryWang_sap    来源:掘金

  我有一个Component,其items属性是一个嵌套的Observable:

   items$: Observable<Observable<Product>[]> = this.componentData$.pipe(
      map((data) => data.productCodes.trim().split(' ')),
      map((codes) =>
        codes.map((code) => this.productService.get(code, this.PRODUCT_SCOPE))
      )
    );
  ComponentData$的类型:
    private componentData$: Observable<model> = this.componentData.data$.pipe(
      filter(Boolean)
    );
  Model的定义:
  componentData$类型为Observable,调用map的回调里又嵌入了map操作,这是返回类型为嵌套Observable的原因。
  因为items 是 从 c o m p o n e n t D a t a 是从componentData 是从componentData得来的,而componentData$又来自componentData,因此我只用考虑如何构造componentData测试数据就行了:
    private componentData$: Observable<model> = this.componentData.data$.pipe(
      filter(Boolean)
    );
  下面看看如何在单元测试用例里创建mock数据:MockCmsProductCarouselComponent:
  完整解决方案:
  const mockComponentData: CmsProductCarouselComponent = {
    uid: '001',
    typeCode: 'ProductCarouselComponent',
    modifiedTime: new Date('2017-12-21T18:15:15+0000'),
    popup: 'false',
    productCodes: productCodeArray.join(' '),
    scroll: 'ALLVISIBLE',
    title: 'Mock Title',
    name: 'Mock Product Carousel',
    container: 'false',
  };
  const MockCmsProductCarouselComponent = <CmsComponentData<any>>{
    data$: of(mockComponentData),
  };

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

关注51Testing

联系我们

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

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

沪ICP备05003035号

沪公网安备 31010102002173号