Podczas tworzenia zestawów testów dla ścieżki routingu napotkałem ten sam problem, co:
{
path: 'edit/:property/:someId',
component: YourComponent,
resolve: {
yourResolvedValue: YourResolver
}
}
W komponencie zainicjowałem przekazaną właściwość jako:
ngOnInit(): void {
this.property = this.activatedRoute.snapshot.params.property;
...
}
Podczas uruchamiania testów, jeśli nie przekażesz wartości właściwości w swojej makiecie ActivatedRoute „useValue”, podczas wykrywania zmian za pomocą metody „fixture.detectChanges ()” uzyskasz wartość niezdefiniowaną. Dzieje się tak, ponieważ pozorowane wartości dla ActivatedRoute nie zawierają właściwości params.property. Następnie pozorna wartość useValue musi mieć te parametry, aby urządzenie mogło zainicjować właściwość „this.właściwość” w komponencie. Możesz dodać go jako:
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();
});
});
Możesz rozpocząć testowanie, na przykład:
it('should ensure property param is yourProperty', async () => {
expect(activatedRoute.snapshot.params.property).toEqual('yourProperty');
....
});
Teraz powiedzmy, że chcesz przetestować inną wartość właściwości, a następnie możesz zaktualizować swoją próbną trasę ActivatedRoute jako:
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');
});
Mam nadzieję że to pomoże!