单元测试 – 将模拟DOM事件传递给没有jQuery的指令处理程序

我有一个非常简单的指令,其目的只是取消dragstart事件:
link: function(scope,element) {
  element.on('dragstart',function(e) {
    e.preventDefault();
  })
}

如何在茉莉花测试中测试?我有以下测试,试图监视一个Event对象,并将其传递给处理程序:

var mockEvent; 

beforeEach(function() {
  mockEvent = new Event('dragstart');
  spyOn(mockEvent,'preventDefault');
});

it('should call preventDefault',function () {
  element.triggerHandler('dragstart',mockEvent);
  expect(mockEvent.preventDefault).toHaveBeenCalled();
});

但测试失败.你可以see this at this Plunker..我如何测试这个(/ refactor的指令,使其可测试)?

编辑:理想地不包括jQuery.
编辑:更改标签

解决方法

您可以包含jquery并创建一个jquery事件对象.这个对象很容易被传递:
beforeEach(function() {
  mockEvent = $.Event('dragstart');
  spyOn(mockEvent,function () {
  element.triggerHandler(mockEvent);
  expect(mockEvent.preventDefault).toHaveBeenCalled();
});

我在你的plunkr中使用了这个jquery版本://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js

相关文章

vue阻止冒泡事件 阻止点击事件的执行 <div @click=&a...
尝试过使用网友说的API接口获取 找到的都是失效了 暂时就使用...
后台我拿的数据是这样的格式: [ {id:1 , parentId: 0, name:...
JAVA下载文件防重复点击,防止多次下载请求,Cookie方式快速简...
Mip是什么意思以及作用有哪些