#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. Поэтому, если кто-нибудь может объяснить, почему, пожалуйста, дайте нам знать 🙂