Прежде чем каждый умрет без ошибки при вызове MockRender

#angular #jasmine #ngmock

Вопрос:

Я тестирую компонент с помощью ngMocks, и моя спецификация продолжает терпеть неудачу с «FormGroup ожидает экземпляр типа FormGroup, пожалуйста, предоставьте его».

Я смог проверить, что component на самом деле это никогда не устанавливалось. На самом деле каждая строка после отмеченной, в которой я вызываю MockRender , не вызывается, beforeEach поэтому компонент не задан.

Как вы можете видеть, я попытался придать formGroup компоненту значение по умолчанию, чтобы, возможно, предотвратить возникновение проблемы, пока MockRender он делает свое дело, но это ничего не изменило.

Есть идеи а) что я могу сделать, чтобы это исправить? б) Почему ошибка не выбрасывается MockRender , а expect не в моей спецификации?

Спекуляция:

     describe('CombinedMultiControlFormFieldComponent', () => {
      let component: CombinedMultiControlFormFieldComponent;
      let fixture;
      const mockDialog = {
        open() {
        }
      };
    
      beforeEach(async () => {
        return MockBuilder(CombinedMultiControlFormFieldComponent)
          .keep(MatFormFieldModule)
          .keep(FormsModule)
          .keep(ReactiveFormsModule)
          .mock(ConcatFormGroupValuesPipe)
          .provide({provide: MatDialog, useValue: mockDialog});
      });
    
      beforeEach(() => {
        fixture = MockRender(CombinedMultiControlFormFieldComponent); <-------------
        component = fixture.componentInstance;
        component.formGroup = fg;
        fixture.detectChanges();
      });
    
      it('should create', () => {
        expect(component).toBeTruthy();
      });
    });
 

тс:

     export class CombinedMultiControlFormFieldComponent {
    
      @Input()
      formGroup: FormGroup = new FormGroup({f1: new FormControl('')});
    
      @Input()
      displayLabel: string;
    
      constructor(private dialog: MatDialog) {
      }
    }
 

ИЗМЕНИТЬ: Я предоставил исправление в ответе ниже, хотя я все еще не совсем понимаю, почему возникает ошибка.

Ответ №1:

Все еще не совсем уверен, почему это происходит, но, указав FormGroup в качестве параметра в MockRender вызове, я смог избавиться от ошибки.

     beforeEach(() => {
      fixture = MockRender(CombinedMultiControlFormFieldComponent, {formGroup: fg}); <-----
      component = fixture.componentInstance;
      fixture.detectChanges();
    });
 

Я все равно хотел бы научиться правильно использовать ngMocks. Поэтому, если кто-нибудь может объяснить, почему, пожалуйста, дайте нам знать 🙂