Я работаю в проекте Angular 9.
У меня есть компонент, который принимает formBuilder в качестве входных данных от родительского компонента. Это мой дочерний компонент (тот, который я тестирую):
export class ChildComponent implements OnInit {
@Input() parentForm: FormGroup; //this is coming from the parentComponent
ngOnInit(): void {
if (this.parentForm) {
this.filteredSelectables = this.parentForm
.get("recipientTypes")
...
}
}
...
Я хочу написать тесты для этого компонента, но мне нужно создать форму, которую тест может использовать (или мне нужно смоделировать родительский компонент и вернуть нужную форму?)
Я добавил FormBuilder в провайдеры testBed, но до сих пор не могу понять, как создать фиктивную форму, с которой я могу протестировать. Тест «следует создать» проходит успешно, но я не могу проверить ничего другого, потому что parentForm не может быть для них нулевым. Вот мой текущий тест:
describe("ChildComponent", () => {
let component: ChildComponent;
let fixture: ComponentFixture<ChildComponent>;
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [ChildComponent, MatAutocomplete],
providers: [FormBuilder],
schemas: [CUSTOM_ELEMENTS_SCHEMA]
})
.compileComponents()
.then(() => {
fixture = TestBed.createComponent(ChildComponent);
component = fixture.componentInstance;
});
}));
beforeEach(() => {
fixture = TestBed.createComponent(ChildComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it("should create", () => {
expect(component).toBeTruthy();
});
...
Я пытался создать форму, подобную этой:
component.parentForm = FormBuilder.group({
recipientTypes: new FormControl(
{
value: ["mock"],
disabled: true
},
Validators.required
)
});
и добавить ее в beforeEach () или даже внутри самого теста. Но я получаю ошибку.
Я подумал, что, может быть, мне нужно высмеять parentComponent и заставить его отправить formBuilder? Вот мой родительский компонент:
export class ParentComponent implements OnInit, OnDestroy {
parentForm: FormGroup;
constructor(
private router: Router,
private formBuilder: FormBuilder
) {}
ngOnInit() {
this.setFormTemplate();
}
setFormTemplate() {
this.templateForm = this.formBuilder.group({
name: new FormControl(
{
value: this.name,
disabled: true
},
Validators.required
),
recipientTypes: new FormControl(
{
value: this.recipientTypes,
disabled: true
},
Validators.required
)
});
}
...
Как мне создать formBuilder для моих тестов?