我正在为 Angular 指令编写一些测试,我需要模拟用户输入到输入字段中。我试图这样做:
element.find('input').val('some value').trigger('input');
但它没有用。触发change
也没有用。我知道我可以直接访问元素范围element.scope()
并对其进行更改,但更改输入值并让 Angular 进行数据绑定似乎更自然。
对于它的价值,我已经input(name).enter(value)
从 Angular ngScenario 签出,它似乎和我做的一样:
...
input.val(value);
input.trigger(event || (supportInputEvent ? 'input' : 'change'));
...
我错过了什么?在这种情况下是否有更好的方法来测试用户输入?
(我做了一个jsFiddler脚本来说明这个问题)
更新
我认为需要进行一些澄清。我并不想改变 DOM 或 Angular 领域本身之外的范围。我有一个指令,它呈现一个绑定到指令范围属性的输入框。我正在编写自动化测试以确保指令执行它应该做的事情,并且一个测试应该做的是模拟一些输入,以便更新指令范围,并且我可以断言在该输入上执行了某些行为。正如我之前提到的,我可以使用 更改测试代码中指令的范围element.scope()
,但我宁愿更改输入的值并让 Angular 来做它的事情。