В моем классе компонентов мой метод getUsers () использует сервис getData (). В моем модульном тесте я хотел бы проверить, успешно ли мой метод вызывает getData (). Поэтому я написал простой тест, но думаю, что-то упустил. В моем тесте я внедряю сервис, создаю fakeasync этого сервиса. Оттуда я наблюдаю за моим сервисом и методом getData. Затем я преформирую свой метод getUsers (). Наконец, я ожидал, что getData будет вызван. При запуске теста я получаю следующую ошибку: TypeError: this.httpService.getData(...).catch is not a function
. Я думаю, что я не использую шпион правильно. Вот изолированный тест:
it('should have getUsers() call the service GetData()', inject([HttpService], fakeAsync((httpService) => {
let url = AppConfig.URL_UsersList //AppConfig is importerd
spyOn(httpService, 'getData').and.returnValue(url);
dashboardComponent.getUsers();
expect(httpService.getData()).toHaveBeenCalled();
})))
Я думал, что это как-то связано с тем, как я настроил класс спецификации? Вот как я это настроил
describe('Dashboard Component', () => {
let httpService: HttpService;
let dashboardComponent: DashboardComponent
let fixture: ComponentFixture<DashboardComponent>
//let element;
beforeEach(async() => {
TestBed.configureTestingModule({
declarations: [
DashboardComponent
],
providers: [
HttpService
],
}).compileComponents();
});
beforeEach(() => {
fixture = TestBed.createComponent(DashboardComponent);
dashboardComponent = fixture.componentInstance;
});
А вот функция, которую я пытаюсь проверить:
getUsers() {
this.httpService.getData(AppConfig.URL_UsersList)
.catch((error: Response | any) => {
this.showAlertWindow(this.exceptionMessage);
console.error(error.message || error);
return Observable.throw(error.message || error);
})
.subscribe((res: any) => {
this.rowData = res;
this.redrawAgGrid();
});
}
Моя цель состоит в том, чтобы мой тест успешно проверял, вызывается ли getData при использовании моего метода getUsers. Спасибо!
РЕДАКТИРОВАТЬ: Таким образом, причина, по которой я получил эту ошибку, заключалась в том, что мой компонент возвращает наблюдаемое, мне просто вернули строку. Вот обновленная строка. Я подозреваю, что это работает должным образом, потому что теперь я получаю совершенно не связанную ошибку, говоря, что свойство API не определено.
spyOn(httpService, 'getData').and.returnValue(Observable.of(url));