2017-10-19 22 views
2

角度4の新しい機能で、ユニットテストから角度4の機能router.paramMapの1つをテストしようとしています。私のアプリケーション。ユニットテストの方法router.paramMapを使用するAngular 4コンポーネント

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

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

しかし、ユニットテストを実行している間、私は以下のように渡して、ルートのparamを渡すメートルにもかかわらず、未定義のメソッドを購読呼び出すことはできませんというエラーを取得メートル。

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

我々は現在、これを使用している

答えて

3

あなたはparamMapの代わりparamsを提供する必要があります。 paramMapは、タイプParamMapから@angular/routerである必要があります。 @angular/routingから通常のオブジェクトをParamMapに変換することができます。あなたの答えのために

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アン・レメンズをしかし、私はもう一つの問題に遭遇した - 例外TypeError:

あなたは以下のようなモックActivatedRouteを提供することができます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((....) => { 
      .... 
     }) 
} 
関連する問題