编辑父组件表单时如何测试有角子组件

时间:2019-08-07 06:08:26

标签: angular unit-testing angular-material

此子组件已保存按钮组件。 因此,我要做的是确保在表单输入字段值更改时显示“保存”按钮。

我可以确认表单名称值更改后,它可以得到form.invalid = falseform.dirty = true,但是Child组件从未显示,仍然是saveBtnComp = nullbtnElmsAfterEdit = []

为什么子组件从不显示?

在parent.component.html

<div>
  <save-button-component
    *ngIf="form.dirty"
    [invalid]="form.invalid"
    (saveChangesEvent)="submit()"
    (cancelEvent)="reset()"
  ></save-button-component>
</div>

在测试用例中

beforeEach(() => {
    fixture = TestBed.createComponent(ParentComponent);
    component = fixture.componentInstance;
    component.value ={
       name: 'John Doe',
       age: '20'
    };
    component.ngOnInit();
    fixture.detectChanges();
});

it('Save Button shows when form is edited', async(() => {

   // before edit form value
   const saveBtnBeforeEdit = fixture.debugElement.nativeElement.querySelector('save-button-component');

   expect(saveBtnBeforeEdit).toBeNull();

   const name = getControl('name');
   name.setValue('Stan Hansen');
   name.markAsDirty();
   fixture.detectChanges();


   // after edit form value
   fixture.whenStable().then(() => {

       const saveBtnAfterEdit = fixture.debugElement.nativeElement.querySelector('save-button-component');

       expect(saveBtnAfterEdit).not.toBeNull();

   });
}));

function getControl(...path: string[]): FormControl {
    return component.form.get(path) as FormControl;
}

1 个答案:

答案 0 :(得分:0)

我解决了这个问题。

我将component.ngOnInit()移至beforeEach();

我更新了代码。