2017-10-19 4 views
2

Ich bin neu zu eckigen 4 und versuchen, eines der eckigen 4 feature router.paramMap von Komponententests zu testen, lesen Route Params in der Art und Weise wie erwartet in meine Bewerbung.Wie Unit-Test eine Angular 4-Komponente, die router.paramMap verwendet

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

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

Aber während Unit-Test läuft, ich bin, die immer Fehler sagen kann nicht definiert abonnieren Methode auch nicht nennen, obwohl ich, wie unten Route param geben m vorbei.

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

Bitte machen

Antwort

3

Sie müssen paramMap statt params bereitzustellen. paramMap sollte vom Typ ParamMap von @angular/router sein, so dass das normale Objekt unter Verwendung der Methode convertToParamMap() von @angular/routing in ParamMap konvertiert werden kann.

Sie können das Mock ActivatedRoute wie unten liefern:

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

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

wir dies zur Zeit mit:

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

Dank @Lotte Lemmens für Ihre Antwort, aber ich lief in ein weiteres Problem - Typeerror: params.get keine Funktion ist, eine Lösung? –

+0

Gibt es einen zusätzlichen Wert für die Verwendung von paramMap? this.router.params.subscribe (par => { const idFromParams = par.id }) Diese prüfbar sein sollte wie oben erwähnt –

0

Ihr Code hat ein Problem, um eine param aus der URL zu erhalten, müssen Sie die Dinge in einem schreiben anders.

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

ngOnInit() { 
    this.router.paramMap 
     .switchMap((params: ParamMap) => { 
      params.get(id); 
      .... 
     }) 
     .subscribe((....) => { 
      .... 
     }) 
} 
Verwandte Themen