gpt4 book ai didi

javascript - 使用 JSUnit 测试 Bound 事件?

转载 作者:行者123 更新时间:2023-12-02 20:22:57 25 4
gpt4 key购买 nike

如何使用 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com