相关疑难解决方法(0)

手动触发输入字段的Angular数据绑定(仅用于单元测试)

我正在为Angular指令编写一些测试,我需要将用户输入模拟到输入字段中.我试着这样做:

element.find('input').val('some value').trigger('input');
Run Code Online (Sandbox Code Playgroud)

但它不起作用.触发change也不起作用.我知道我可以直接访问元素范围element.scope()并更改它,但更改输入值并让Angular执行数据绑定似乎更自然.

对于它的价值,我已经input(name).enter(value)从Angular ngScenario中检出了它,它似乎和我一样:

...
input.val(value);
input.trigger(event || (supportInputEvent ? 'input' : 'change'));
...
Run Code Online (Sandbox Code Playgroud)

我错过了什么?在这种情况下,有更好的方法来测试用户输入吗?

(我制作了一个jsFiddler脚本来说明这个问题)

UPDATE

我认为需要澄清一些.我不是试图改变DOM以及Angular领域之外的范围本身.我有一个指令,它将输入框绑定到指令范围的属性.我正在编写自动化测试以确保指令执行它应该做的事情,并且一个测试应该做的是模拟一些输入以便指令范围得到更新并且我可以断言在该输入上执行某些行为.正如我之前提到的,我可以通过使用来改变测试代码的指令范围element.scope(),但我宁愿改变输入的值,让Angular做它的事情.

angularjs angularjs-directive angularjs-scope

9
推荐指数
1
解决办法
6747
查看次数