У меня есть простой метод очистки в моем компоненте, как показано ниже. Как вы можете видеть в комментарии, this.form.reset();
вызывает ошибку в моем тесте. Когда эта строка удалена, тест завершается успешно. Ошибка: // TypeError: Cannot read property 'reset' of undefined
myComponent.component.ts
onClearFilter() {
this.form.reset(); // TypeError: Cannot read property 'reset' of undefined
this.search = '';
this.isAdvanced = false;
this.filterStateService.clearFilterState(this.filterStateKey);
// Reset Filter state
this.filterState = new Filter(this.filterStateKey);
this.filterStateService.filterStates[this.filterStateKey] = { ...this.filterState };
this.doFilter();
}
myComponent.spe c .ts
describe('onClearFilter', () => {
it('makes expected calls', () => {
const filterStateServiceStub: FilterStateService = fixture.debugElement.injector.get(FilterStateService);
spyOn(filterStateServiceStub, 'clearFilterState').and.callThrough();
component.onClearFilter();
expect(filterStateServiceStub.clearFilterState).toHaveBeenCalled();
});
});
Я новичок в модульном тестировании, но, думаю, мне нужно определить this.form в моем it()
, чтобы позволить reset
больше не быть неопределенным - как мне это сделать в моем сценарии? Спасибо
ОБНОВЛЕНИЕ
Я пытался ...
describe('onClearFilter', () => {
it('makes expected calls', () => {
const filterStateServiceStub: FilterStateService = fixture.debugElement.injector.get(FilterStateService);
const form: FormGroup = fixture.debugElement.injector.get(FormGroup);
component.form = form;
spyOn(filterStateServiceStub, 'clearFilterState').and.callThrough();
spyOn(component.form, 'reset').and.callThrough();
component.onClearFilter();
expect(component.form.reset).toHaveBeenCalled();
expect(filterStateServiceStub.clearFilterState).toHaveBeenCalled();
});
});
FormGroup
происходит из ReactiveFormsModule
импорта, поэтому я попытался получить форму. сбросить с этого, как указано выше, но получил новую ошибку ...
Error: StaticInjectorError(DynamicTestModule)[FormGroup]:
StaticInjectorError(Platform: core)[FormGroup]:
NullInjectorError: No provider for FormGroup!
Исходя из вышеизложенного, я добавил FormGroup
своим провайдерам, но это привело к собственным проблемам, и после прочтения вы не делаете это все доступно из ReactiveFormsModule
import.