我试图测试在链接上单击“ preventDefault”是否被调用。但是,我很难用我可以监视的对象来替换一个真实的“事件”对象:
这是触发点击事件的方式:
var e = jasmine.createSpyObj('e', [ 'preventDefault' ]); $element.triggerHandler('click', [e]);
但是,在运行指令代码时,事件元素不会被伪造的事件元素替代:
$element.on('click', function(event) { console.log(event); }
我尝试了不同的方法向触发器处理程序添加第二个参数- 作为数组,对象,只是一行,等等。都没有用。.同时没有太多的触发器处理程序示例和附加参数,所以我有点丢失…
提前致谢!
文档说triggerHandler()将虚拟对象传递给处理程序:http : //docs.angularjs.org/api/ng/function/angular.element
triggerHandler()
如果检查源,则可以看到triggerHandler()创建了自己的事件对象,然后将第二个参数作为事件数据而不是实际事件对象传递:
https://github.com/angular/angular.js/blob/master/src/jqLite.js#L882
相关代码:
var event = [{ preventDefault: noop, stopPropagation: noop }]; forEach(eventFns, function(fn) { fn.apply(element, event.concat(eventData)); });
我已经使用jQuery的内部事件模拟器来创建自己的事件。可能对您有用:http : //wingkaiwan.com/2012/09/23/triggering-mouse-events-with-jquery-simulate- when-testing-in-javascript/