angular - 在不设置 formcontrol 的情况下测试角度反应形式输入值
问题描述
我有这样的表格:
<form id="save_form" (ngSubmit)="save()">
<input id="input_user" type="text" [formControl]="myForm" />
<button type="submit">save</button>
</form>
我有一个这样的测试:
const inputUser: HTMLInputElement = fixture.nativeElement.querySelector("#input_user");
const saveForm: DebugElement = fixture.debugElement.query(By.css("#save_form"));
inputUser.value = "Bob";
//component.myForm.setValue("Bob");
saveForm.triggerEventHandler("ngSubmit", null);
fixture.detectChanges();
在我的组件中,输入值没有更新 myForm。如果我使用注释掉的语法,表单会更新,但不会填充输入标签。
我正在尝试模拟来自用户的输入值,formcontrol 是否应该通过测试中的输入值进行更新?我觉得如果我只是手动更新了表单控件,我就不是在模拟用户。
更新:
//component.searchUsers.setValue("Bob");
const e: Event = document.createEvent("Event");
e.initEvent("input", false, false);
inputUser.value = "Bob";
inputUser.dispatchEvent(e);
fixture.detectChanges();
myForm.triggerEventHandler("ngSubmit", null);
fixture.detectChanges();
fixture.whenStable().then(() =>
expect(condition).toBe(true));
解决方案
您需要通过从输入分派更改事件来触发更改检测,然后检测更改。我这样做如下。
const e:Event = document.createEvent('Event');
e.initEvent('input', false, false);
inputUser.value = 'Bob';
inputUser.dispatchEvent(e);
fixture.detectChanges();
fixture.whenStable().then(() => expect(something).toEqual('something'));
推荐阅读
- python - Plotly Dash 条形图具有动态变化的条形宽度(或动态变化的图形频率)
- vue.js - 在 Vue 组件中导入 SCSS 变量
- c++ - 具有派生数据类型查找功能的 C++ 优先级队列
- reactjs - 为什么我的单选输入只能在数组映射的整个数组列表中选择一个选项?
- c# - RestSharp api钩子永远不会被调用
- python - python playwright - 在输入字段中输入的问题
- c - 为什么这个字符会出现分段错误?
- api - 使用不同的号码和分机通过 RingCentral API 发送短信
- node.js - Cloudlinux NodeJS 要求将应用程序的节点模块存储在名为“node_modules”的符号链接指向的单独文件夹(虚拟环境)中
- php - 如何在php中的两个侧面字符串之间进行替换