Beim Erstellen von Testsuiten für einen Routing-Pfad ist dasselbe Problem aufgetreten wie:
{
path: 'edit/:property/:someId',
component: YourComponent,
resolve: {
yourResolvedValue: YourResolver
}
}
In der Komponente habe ich die übergebene Eigenschaft wie folgt initialisiert:
ngOnInit(): void {
this.property = this.activatedRoute.snapshot.params.property;
...
}
Wenn Sie beim Ausführen der Tests keinen Eigenschaftswert in Ihrer aktivierten ActivatedRoute "useValue" übergeben, werden Sie undefiniert, wenn Sie Änderungen mit "fixture.detectChanges ()" erkennen. Dies liegt daran, dass die Scheinwerte für ActivatedRoute nicht die Eigenschaft params.property enthalten. Dann muss der Mock useValue über diese Parameter verfügen, damit das Fixture die Eigenschaft 'this.property' in der Komponente initialisieren kann. Sie können es hinzufügen als:
let fixture: ComponentFixture<YourComponent>;
let component: YourComponent;
let activatedRoute: ActivatedRoute;
beforeEach(done => {
TestBed.configureTestingModule({
declarations: [YourComponent],
imports: [ YourImportedModules ],
providers: [
YourRequiredServices,
{
provide: ActivatedRoute,
useValue: {
snapshot: {
params: {
property: 'yourProperty',
someId: someId
},
data: {
yourResolvedValue: { data: mockResolvedData() }
}
}
}
}
]
})
.compileComponents()
.then(() => {
fixture = TestBed.createComponent(YourComponent);
component = fixture.debugElement.componentInstance;
activatedRoute = TestBed.get(ActivatedRoute);
fixture.detectChanges();
done();
});
});
Sie können mit dem Testen beginnen, wie zum Beispiel:
it('should ensure property param is yourProperty', async () => {
expect(activatedRoute.snapshot.params.property).toEqual('yourProperty');
....
});
Angenommen, Sie möchten einen anderen Eigenschaftswert testen, dann können Sie Ihre nachgebildete ActivatedRoute wie folgt aktualisieren:
it('should ensure property param is newProperty', async () => {
activatedRoute.snapshot.params.property = 'newProperty';
fixture = TestBed.createComponent(YourComponent);
component = fixture.debugElement.componentInstance;
activatedRoute = TestBed.get(ActivatedRoute);
fixture.detectChanges();
expect(activatedRoute.snapshot.params.property).toEqual('newProperty');
});
Hoffe das hilft!