В моем модульном тесте я проверяю, вызывается ли моя служба. У меня есть функция с именем loadUser (). Эта функция использует сервис getData, чтобы извлечь всех пользователей из URL. Затем он загружает в форму идентификатор пользователя и информацию о конкретном пользователе (имя, фамилия и т. Д.). С этого момента пользователю разрешено редактировать свои учетные данные. Эта функция использует patchValue для отображения данных в правильном поле формы. Сейчас я только пытаюсь проверить, вызван ли мой сервис, getData и все. При выполнении теста я получаю эту ошибку: TypeError: Cannot read property 'patchValue' of undefined
. Я хотел бы в своем тесте сказать, что getData был вызван. Вот мой тест, а ниже - моя функция (для краткости я выложил только необходимый код). Я опубликовал свои настройки, потому что, может быть, я что-то там упустил?
Spec:
fdescribe('User Component', () => {
let httpService: HttpService;
let userComponent: UserComponent
let fixture: ComponentFixture<UserComponent>
let debugElement: DebugElement;
beforeEach(async() => {
TestBed.configureTestingModule({
declarations: [
UserComponent,
],
imports: [HttpModule, FormsModule,ReactiveFormsModule],
providers: [
HttpService
],
}).compileComponents();
});
beforeEach(() => {
fixture = TestBed.createComponent(UserComponent);
userComponent = fixture.componentInstance;
debugElement = fixture.debugElement;
httpService = debugElement.injector.get(HttpService);
fit('should have getUsers() call the service GetData()', inject([HttpService], fakeAsync((httpService) => {
let url = AppConfig.URL_UserById'
let getDataSpy= spyOn(httpService,'getData').and.returnValue(Observable.of(url));
userComponent.loadUser();
expect(getDataSpy).toHaveBeenCalled();
})))
})
Компонент:
loadUser() {
this.httpService.getData(AppConfig.URL_UserById + "?UserID=" + this.userId)
.catch((error: Response | any) => {
this.showAlertWindow(this.exceptionMessage);
console.error(error.message || error);
return Observable.throw(error.message || error);
})
.subscribe((res: any) => {
this.frmUser.patchValue({
FirstName: res.FirstName,
MiddleName: res.MiddleName,
EmailAddress: res.EmailAddress,
LastName: res.LastName
});
this.setUserAccess(res.UserAccessDetail)
});
Теперь, если я закомментирую строку this.frmUser.patchValue){FirstName...}
, тест пройден и успешно проверяет, вызван ли getData (). Так что я предполагаю, что мне нужно инициировать patchValue или что-то в этом роде. Спасибо.