Angular语言 - test响应式表单控件在值改变时启用



我必须测试一些控件是否启用。

ngOnChanges(): void {
this.form.get('menuVisibility').valueChanges.subscribe((visible: boolean) => {
['userIdVisibility', 'userOptionsVisibility', 'languageVisibility'].forEach((controlName) => {
if (visible) {
this.form.controls[controlName].enable();
} else {
this.form.controls[controlName].disable();
}
});
});
}

我写这个规范:

it('should dispatch action for valueChanges', fakeAsync(() => {
component.form.get('menuVisibility').setValue(true);
component.form.get('menuVisibility').updateValueAndValidity({ emitEvent: true });
component.ngOnChanges();
tick();
expect(component.form.get('userIdVisibility').enabled).toBeTruthy();
expect(component.form.get('userOptionsVisibility').enabled).toBeTruthy();
expect(component.form.get('languageVisibility').enabled).toBeTruthy();
}));

但是测试从不进入forEach块。

我同意@MoxxiManagarm,这是一个内存泄漏,我会把它移动到ngOnInit

为了快速解除阻塞,在设置值之前尝试先调用ngOnChanges(),以便在我们更改值之前订阅可观察流:

it('should dispatch action for valueChanges', fakeAsync(() => {
component.ngOnChanges();
component.form.get('menuVisibility').setValue(true);
component.form.get('menuVisibility').updateValueAndValidity({ emitEvent: true });
tick();
expect(component.form.get('userIdVisibility').enabled).toBeTruthy();
expect(component.form.get('userOptionsVisibility').enabled).toBeTruthy();
expect(component.form.get('languageVisibility').enabled).toBeTruthy();
}));

相关内容

最新更新