2017-10-19 5 views
3

route.snapshot.paramsをモックする方法は?私のようなもの持っている私のアンギュラ4コンポーネントで

constructor(private route: ActivatedRoute) { 
} 

ngOnInit() { 
    this.myId = this.route.snapshot.params['myId']; 
} 

をそして、私はのように見えると仮定モックを作成しようとしているが、以下:

class MockActivatedRoute extends ActivatedRoute { 
    public params = Observable.of({ myId: 123 }); 
}  

私のテストはして失敗します。

TypeError: Cannot read property 'params' of undefined.

私はそれを模擬すると思いますか?私はActivatedRouteの正しい使い方を誤解していて、私のコンポーネントでrouter.subscribeをよく使うべきですか?私は人々がスナップショット自体を嘲笑した複雑な例をいくつか見ていましたが、私にとってはそれは複雑すぎます。私は単に何かにテスト対象のメソッドを変更する場合は、次のように

describe('ngOnInit',() => { 
it('should set up initial state properly', 
() => { 
    const component = TestBed.createComponent(MyComponent).componentInstance; 
    component.ngOnInit(); 
    expect(component.myId).toEqual('123'); 
    }); 
}); 

- テストが動作します:

+0

:)

providers: [MyComponent, { provide: ActivatedRoute, useValue: {snapshot: {params: {'myId': '123'}}} } 

ありがとう:ルート= [{パス: '情報'、データ:{たcatalogId: '123'} 、component:StatusComponent}、] 'そして、' RouterTestingModule.withRoutes(fakeRoutes) 'を返します。この構文がサポートされているかどうかは不明です。 – and85

+0

これをユニットテストに使用しようとしていますか?もしあなたがそのコードを投稿することができます – LLai

+0

あなたのモックはスナップショット 'this.route.snapshot.params'の代わりに観測可能な' this.route.params'(観測値を返します)をモックしているので、未定義のパラメータを取得していますparamsのオブジェクト) – LLai

答えて

1

テスト自体は非常に簡単です

ngOnInit() { 
    //this.myId = this.route.snapshot.params['myId']; 
    this.route.params.subscribe(params => { 
    this.myId = params['myId']; 
    }); 
} 

は明らかに私が活性化したスナップショットを模擬する必要がありますしかし、より良いアプローチがありますか?

3

私はActivatedRouteスナップショットを簡単な方法でモックする方法を見つけました。このような何かが私の作品:私もCONST fakeRoutes `のような何かをしようとした

+0

感謝します!!!!!!! –

関連する問題