【发布时间】:2013-07-13 03:11:29
【问题描述】:
我有以下 AngularJS 指令,它创建了一个 input 元素。输入具有运行doIt() 函数的ng-change 属性。在我的指令的单元测试中,我想检查用户更改输入时是否调用了 doIt 函数。但是测试没有通过。虽然在手动测试时它可以在浏览器中工作。
指令:
...
template: "<input ng-model='myModel' ng-change='doIt()' type='text'>"
测试:
el.find('input').trigger('change') // Dos not trigger ng-change
现场演示(ng-change):http://plnkr.co/edit/0yaUP6IQk7EIneRmphbW?p=preview
现在,如果我手动绑定 change 事件而不是使用 ng-change 属性,则测试通过。
template: "<input ng-model='myModel' type='text'>",
link: function(scope, element, attrs) {
element.bind('change', function(event) {
scope.doIt();
});
}
现场演示(手动绑定):http://plnkr.co/edit/dizuRaTFn4Ay1t41jL1K?p=preview
有没有办法使用ng-change 并使其可测试?谢谢。
【问题讨论】:
-
ng-change 在模型更改时触发,而不是事件。为什么不只为您的“doIt”fn 测试控制器代码?
-
@marko,谢谢你的好问题。我想要在指令的测试中做的就是检查当用户更改输入时是否调用了 doIt。 doIt 本身将在指令的测试中被模拟,因为它已经在控制器的测试中进行了测试,正如你所建议的那样。
标签: angularjs angularjs-directive