У меня есть компонент Angular, который использует ActivateRoute
getFlavorAndService(): void {
this._route.params.subscribe(params => {
const flavor: string = params.flavor;
const service: string = params.service;
const platform: string = params.platform;
if (platform) {
this.platform = platform;
} else {
this.platform = this._dataService.DEFAULT_PLATFORM;
}
if (flavor) {
this.flavor = flavor;
} else {
this.flavor = this._dataService.DEFAULT_FLAVOR;
}
if (service) {
this.service = service;
} else {
this.service = this._dataService.DEFAULT_SERVICE;
}
});
}
Я пытаюсь протестировать метод getFlavorAndService()
следующим образом:
it('Test', () => {
dataService.attributeSearchEnabled = false;
dataService.endpointSearchEnabled = false;
const spy = spyOn(activatedRoute, 'params').and.returnValue(of({
flavor: 'by-fund',
service: 'profile_benchmarks',
platform: 'on-prem',
}));
component.getFlavorAndService();
expect(spy).toHaveBeenCalled();
expect(component.platform).toBe('on-prem');
expect(component.service).toBe('profile_benchmarks');
expect(component.flavor).toBe('by-fund');
});
Еще я создал заглушку для ActivatedRoute:
class ActivatedRouteStub {
get params() {
return of({});
}
get queryParams() {
return of({});
}
}
Мои тестовые примеры терпят неудачу, и ни одно из ожиданий не работает нормально. аромат, сервис и платформа принимают значения по умолчанию, предоставленные в классе, а не значения, переданные с использованием spyOn(activatedRoute, 'params').and.returnValue(of({....
Я также предоставил ActivatedRouteStub
в методе TestBed.configureTestingModule
{ provide: ActivatedRoute, useClass: ActivatedRouteStub }