2017-08-28 18 views
2

私はAngularを学んでいます。テストをしたいのですが、私は立ち往生しています。私は機能持っている:あなたはどのようにActivatedRouteを模擬しますか

route: ActivatedRoute 

ngOnInit(): void { 
    this.route.paramMap 
    .switchMap((params: ParamMap) => 
     this.SomethingService.getSomething(params.get('id'))) 
     .subscribe(something => { 
      this.something = something; 
      this.doSomethingElse(); 
    }); 
} 

をしてActivatedRouteを模擬する簡単な方法はこれです、私はそれをテストしたいが、私はActivatedRoute

答えて

2

を模擬する方法がわかりません1:

TestBed.configureTestingModule({ 
     declarations: [YourComponenToTest], 
     providers: [ 
     { 
      provide: ActivatedRoute, 
      useValue: { 
      params: Observable.from([{id: 1}]), 
      }, 
     }, 
     ] 
    }); 

は、その後、あなたのテストでそれが利用できるようになりますし、あなたの関数はこれで動作するはずです(少なくとも、アクチvatedRoute part)

TestBed.get(ActivatedRoute)itファンクションで入手できます。

は、私が代わりのparamsのparamMapを使用して、同じ問題に直面していたrxjs/Rxからではなくrxjs/Observable

+0

OPが 'paramMap'を使用していて、' params'を使用していないため、これは動作しません。 – Splaktar

2

から観察可能にインポートすることを忘れないでください。これは私のために働いて、少なくとも最も単純なケースのために得た:複数のプロパティでそれを適切に行う方法について興味がある人々のために

import { async, ComponentFixture, TestBed } from '@angular/core/testing'; 
import { Observable } from 'rxjs/Observable'; 
import 'rxjs/add/observable/of'; 
import { ComponentToTest } from './component-to-test.component'; 
import { ActivatedRoute } from '@angular/router'; 

TestBed.configureTestingModule({ 
    declarations: [ComponentToTest], 
    providers: [ 
    { 
     provide: ActivatedRoute, 
     useValue: { 
      paramMap: Observable.of({ get: (key) => 'value' }) 
     } 
    } 
    ] 
}); 
0

、これはあなたのモッククラスを定義する方法です。

import { convertToParamMap } from '@angular/router'; 
import { Observable } from 'rxjs/Observable'; 

export class ActivatedRouteMock { 
    public paramMap = Observable.of(convertToParamMap({ 
     testId: 'abc123', 
     anotherId: 'd31e8b48-7309-4c83-9884-4142efdf7271',   
    })); 
} 

この方法でparamMapを購読し、複数の値(この場合はtestIdanotherId)を取得することができます。

関連する問題