Під час створення тестових наборів для шляху маршрутизації натрапила на те саме:
{
path: 'edit/:property/:someId',
component: YourComponent,
resolve: {
yourResolvedValue: YourResolver
}
}
У компоненті я ініціалізував передане властивість як:
ngOnInit(): void {
this.property = this.activatedRoute.snapshot.params.property;
...
}
Під час запуску тестів, якщо ви не передасте значення властивості у вашому імітованому ActivatedRoute "useValue", ви отримаєте невизначеність при виявленні змін за допомогою "fixture.detectChanges ()". Це тому, що фіктивні значення для ActivatedRoute не містять властивості params.property. Потім для mock useValue потрібно мати ці параметри, щоб прилад ініціалізував 'this.property' у компоненті. Ви можете додати його як:
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();
});
});
Ви можете розпочати тестування, як наприклад:
it('should ensure property param is yourProperty', async () => {
expect(activatedRoute.snapshot.params.property).toEqual('yourProperty');
....
});
Тепер, скажімо, ви хочете протестувати інше значення властивості, тоді ви можете оновити свій макет ActivateRoute як:
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');
});
Сподіваюся, це допомагає!