我试图测试上的链接点击'preventDefault之称。不过,我有困难,以取代一个真正的'事件'对象,我可以窥探:
I'm trying to test that on a link click 'preventDefault' is called. However, I have difficulties to replace a real 'event' object with one I can spy on:
下面是如何触发我的单击事件:
Here is how I trigger the click event:
var e = jasmine.createSpyObj('e', [ 'preventDefault' ]);
$element.triggerHandler('click', [e]);
然而,当该指令code为正在运行,事件元件不与更换一个假
However, when the directive code is being run, the event element is not replaced with a fake one:
$element.on('click', function(event) {
console.log(event);
}
我尝试添加第二个参数来triggerHandler不同的方式 - 作为数组,作为一个对象,只是一些线等工作都没有。它triggerHandler的没有那么多的例子也连同其他参数,所以我觉得一点点失去了...
I tried different ways of adding a second parameter to triggerHandler - as an array, as an object, just some line, etc. Neither worked.. It is also not that many examples of triggerHandler together with additional parameters, so I feel a little bit lost...
在此先感谢!
推荐答案
的文档说 triggerHandler()
通过虚拟对象的处理程序:的 http://docs.angularjs.org/api/ng/function/angular.element
The docs say that triggerHandler()
passes a dummy object to the handler: http://docs.angularjs.org/api/ng/function/angular.element
如果您检查源代码,你可以看到, triggerHandler()
创建自己的事件对象,然后通过你的第二个参数作为事件数据,而不是实际的事件对象:
If you check the source, you can see that triggerHandler()
creates its own event object, and then passes your second argument as the event data, not the actual event object:
https://github.com/angular/ angular.js / BLOB /主/ src目录/ jqLite.js#L882
相关code:
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/
相关推荐
最新文章