2017-10-19 109 views
2

我试用了angular 4,并试图从单元测试中测试angular 4功能中的一个router.paramMap,采用休耕方式读取路由参数并按预期工作我的应用程序。如何对使用router.paramMap的Angular 4组件进行单元测试使用router.paramMap

constructor(private router:Router, private actRoute:ActivatedRoute) { 
} 

ngOnInit() { 
    this.router.paramMap.subscribe(params => { 
     params.get(id); 
    }) 
...... 
} 

但运行单元测试时,我m到处错误,说不能叫认购即使I M传递传递路线PARAM如下未定义的方法。

{ 
    provide: ActivatedRoute, 
    useValue: { params: Observable.of({id: 1}) } 
} 

请建议

回答

3

您需要提供paramMap而不是paramsparamMap应该是来自@angular/routerParamMap类型,因此可以使用从@angular/routing的方法convertToParamMap()将正常对象转换为ParamMap

可以提供模拟ActivatedRoute象下面这样:

import { convertToParamMap} from '@angular/router'; 
.... 
..... 

{ 
     provide: ActivatedRoute, 
     useValue: { paramMap: Observable.of(convertToParamMap({id: 1})) } 
} 
0

我们目前正在使用此:

{ provide: ActivatedRoute, useValue: { 'params': Observable.from([{ 'id': '1'}]) } }, 
+0

感谢@Lotte Lemmens你的答案,但我遇到了一个更的问题 - 类型错误:params.get不是一个函数,任何解决方案? –

+0

您有使用paramMap的额外价值吗? this.router.params.subscribe(par => { const idFromParams = par.id }) 这应该是可测试的,如上所述 –

0

您的代码有问题,为了从URL获得PARAM,你必须写一个东西不同的方式。

constructor(private router:Router, private actRoute:ActivatedRoute) { 
} 

ngOnInit() { 
    this.router.paramMap 
     .switchMap((params: ParamMap) => { 
      params.get(id); 
      .... 
     }) 
     .subscribe((....) => { 
      .... 
     }) 
} 
相关问题