change angular routing

change - router events angular 6



Prueba de la ruta angular 2 padres (1)

Tengo un componente que accede a un valor de ruta principal como este:

ngOnInit() { this.route.parent.parent.params.subscribe(params => { this.placeService.getPlace(params[''id'']).subscribe(place => this.place = place); }); }

Aquí está el archivo completo en caso de que ayude.

import { Component, OnInit } from ''@angular/core''; import { ActivatedRoute } from ''@angular/router''; import { PlaceService } from ''../place.service''; import { Place } from ''../place''; @Component({ selector: ''app-diner-review-list'', templateUrl: ''./diner-review-list.component.html'', styleUrls: [''./diner-review-list.component.css''], providers: [PlaceService] }) export class DinerReviewListComponent implements OnInit { place: Place; constructor(private route: ActivatedRoute, private placeService: PlaceService) { } ngOnInit() { this.route.parent.parent.params.subscribe(params => { this.placeService.getPlace(params[''id'']).subscribe(place => this.place = place); }); } }

Mi problema es que cuando realizo la prueba obtengo

TypeError: no se puede leer la propiedad ''parent'' de null

Esto tiene sentido. this.route.parent es null . Pero no me importa eso; No estoy probando la ruta en este momento.

Aquí está mi prueba:

/* tslint:disable:no-unused-variable */ import { async, ComponentFixture, TestBed } from ''@angular/core/testing''; import { RouterTestingModule } from ''@angular/router/testing''; import { By } from ''@angular/platform-browser''; import { DebugElement } from ''@angular/core''; import { MockPlaceService } from ''../../../testing/mock-place.service''; import { DinerReviewListComponent } from ''./diner-review-list.component''; import { PlaceService } from ''../place.service''; let mockPlaceService = new MockPlaceService(); describe(''DinerReviewListComponent'', () => { let component: DinerReviewListComponent; let fixture: ComponentFixture<DinerReviewListComponent>; beforeEach(async(() => { TestBed.configureTestingModule({ declarations: [ DinerReviewListComponent ], imports: [RouterTestingModule] }) .overrideComponent(DinerReviewListComponent, { set: { providers: [ { provide: PlaceService, useValue: mockPlaceService } ] } }) .compileComponents(); })); beforeEach(() => { fixture = TestBed.createComponent(DinerReviewListComponent); component = fixture.componentInstance; fixture.detectChanges(); }); it(''should create'', () => { expect(component).toBeTruthy(); }); });

¿Cómo puedo obtener mi prueba para descartar el valor de ruta ausente o proporcionar uno falso?


Terminé resolviéndolo de la siguiente manera: proporcionando una ruta falsa. Esto es lo que hice.

Presta atención a las partes que mencionan mockActivatedRoute .

/* tslint:disable:no-unused-variable */ import { async, ComponentFixture, TestBed } from ''@angular/core/testing''; import { RouterTestingModule } from ''@angular/router/testing''; import { ActivatedRoute } from ''@angular/router''; import { By } from ''@angular/platform-browser''; import { DebugElement } from ''@angular/core''; import { Observable } from ''rxjs/Observable''; import ''rxjs/add/observable/of''; import { MockPlaceService } from ''../../../testing/mock-place.service''; import { DinerReviewListComponent } from ''./diner-review-list.component''; import { PlaceService } from ''../place.service''; let mockPlaceService = new MockPlaceService(); class MockActivatedRoute { parent: any; params: any; constructor(options) { this.parent = options.parent; this.params = options.params; } } let mockActivatedRoute = new MockActivatedRoute({ parent: new MockActivatedRoute({ parent: new MockActivatedRoute({ params: Observable.of({ id: ''1'' }) }) }) }); describe(''DinerReviewListComponent'', () => { let component: DinerReviewListComponent; let fixture: ComponentFixture<DinerReviewListComponent>; beforeEach(async(() => { TestBed.configureTestingModule({ declarations: [ DinerReviewListComponent ], imports: [RouterTestingModule] }) .overrideComponent(DinerReviewListComponent, { set: { providers: [ { provide: PlaceService, useValue: mockPlaceService }, { provide: ActivatedRoute, useValue: mockActivatedRoute } ] } }) .compileComponents(); })); beforeEach(() => { fixture = TestBed.createComponent(DinerReviewListComponent); component = fixture.componentInstance; fixture.detectChanges(); }); it(''should create'', () => { expect(component).toBeTruthy(); }); });