2017-10-19 140 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((....) => { 
      .... 
     }) 
} 
相關問題