javascript - 使用 JSUnit 测试 Bound 事件?

标签 javascript events jsunit

如何使用 JSUnit 测试事件处理程序是否绑定(bind)到节点?

这是我所拥有的:

var mynode = document.getElementById( "mynode" );

assertNotNull( mynode );

MyLibrary.attachEvent( mynode, "click", function( ){ return true; } );

assertEquals( typeof mynode.onclick, typeof function( ){ return true; } );

但是 mynode.onclick 的类型当然是对象;而函数的类型是……好吧……一个函数。

如果我尝试 assertEquals( mynode.onclick, function( ){ return true; } ); 断言也会失败。

有什么建议吗?

最佳答案

请注意,“onclick”属性与 addEventListener 的机制不同。

在您的示例中,mynode.onclick 属性可能等于 null,因为 MyLibrary.attachEvent 正在使用 addEventListener(符合标准)/attachEvent(IE < 9)方法。因此你测试:

typeof mynode.onclick = typeof null = "object"

现在你的问题是当 DOM Level 2 Events specification写入时,他们忘记为当前在节点上注册的事件列表提供访问器。所以基本上你无法编写你尝试实现的单元测试

DOM Level 3 Events specification (仍处于草稿模式)在 2002 年通过元素的新属性解决了该问题: eventListenerList

不幸的是,当前的草案似乎已经删除了这个属性,我认为您不会找到实现它的浏览器。

我只能找到Firefox 3.6实现 getListenerInfoFor() 方法,但它似乎仅在 chrome/XUL 模式下可用,因此没有帮助。

你可以

  • 等待 eventListenerList 在所有浏览器中实现;-)
  • 相信 MyLibrary 正确添加了事件
  • 在回调函数内添加一个带有测试代码的假事件,并在元素上调度一个点击事件

希望这对你有帮助

杰罗姆·瓦格纳

关于javascript - 使用 JSUnit 测试 Bound 事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5294028/

相关文章:

javascript - CefGlue 使用 CefDomVisitor 检测 evenfint 监听器

javascript - 在单元测试中显示对象详细信息

javascript - 用于 JSUnit 测试的公共(public)测试群?

javascript - twitter bootstrap 侧面导航菜单 onclick 折叠

javascript - 如何向 Google pagespeed API 发送批量请求?

java - 泛型映射 : read and write

javascript - Jquery Google map 用户位置

javascript - 如何正确地将 slick.js 集成到您的站点中?

javascript - 如果 html 站点中没有事件表单,则按 Enter 键发出警报