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的定义:因为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), };