Невозможно создать экземпляр angular form.properties в модульном тесте с жасмином. - PullRequest
0 голосов
/ 07 апреля 2020

У меня есть простой метод очистки в моем компоненте, как показано ниже. Как вы можете видеть в комментарии, 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.

...