Angular Reactive Form检查FormControl是否存在于Test中

时间:2018-02-06 08:51:58

标签: angular jasmine angular-reactive-forms

我在Angular 5中有一个反应形式,这是有效的。这个表格有e.q.一个输入字段和一个复选框。

<div class="form-group" *ngIf="!myForm.controls.myCheckbox.value">
    <input class="form-control" formControlName="myField"
</div>

<div class="form-group">
    <input type="checkbox" formControlName="myCheckbox">
</div>

该复选框用于处理输入字段的可见性:如果选中输入字段是不可见的,反之亦然。

我正在使用TestBed编写带有jasmine的测试来配置componentFixture。

我试图获取formControl并检查是否存在,例如以下陈述,但不起作用。

let myField= component.driverForm.controls['myField'];
let myCheckbox= component.driverForm.controls['myCheckbox'];
myCheckbox.setValue(true);

fixture.detectChanges();

expect(myField).toBeFalsy("myField not existing");
  

预期FormControl(...)是假的'myField not existing'。

现在我的问题是,如何在点击茉莉花测试中的复选框时测试表单控件“myField”是否可见/不可见?

1 个答案:

答案 0 :(得分:0)

好的,我发现自己是一个解决方案。起初我需要通过以下方式获取元素:

const el = fixture.debugElement.nativeElement;
let myField= el.querySelector('input[formControlName=myField]');
expect(myField).toBeTruthy();

let myCheckboxControl= component.driverForm.controls['myCheckbox'];
expect(myCheckboxControl.value).toEqual(false);
//set checkbox state to true
myCheckboxControl.setValue(true);

fixture.detectChanges();

然后我需要在更新复选框后再次获取输入字段:

myField = el.querySelector('input[formControlName=myField]');
expect(myField).toBeNull("myField not existing");