用于单元测试的最佳模拟 DOM 事件的方法是什么?

4
我正在使用moo4q+jquery,配合qUnit+sinon测试框架。
目前,为了触发一个点击事件,我已经执行了以下操作: object.jThis.click(); // 模拟点击事件 其中,object.jThis是jQuery对象(包装器集),该对象映射到另一个对象。
对我来说,问题在于其他事件,如.hover(),与.click()不同的是无法触发事件。
这是否只是jQuery API的不一致性?
编辑:
// wire up event
attach: function() {
    this.jThis.hover(function(eventObj) {
        this.proxied.showOptionsProxy(true);
    }, function() {
        this.proxied.showOptionsProxy(false);
    });
}
// unit test: 
test("Test_hover_shows_menu", 2, function() {
    var target = this.getTarget();
    this.spy(target.proxied, 'showOptionsProxy');
    target.detach(); // must detach only for unit test after setting up spy on the proxy
    target.attach();
    target.jThis.mouseenter();
    ok(target.proxied.showOptionsProxy.calledWith(true), "hovering over options button shows the menu");
    target.jThis.mouseleave();
    ok(target.proxied.showOptionsProxy.calledWith(false), "mousing away from options button hides menu");
});

你想编写一个集成测试,测试点击是否已经触发或者是一个单元测试,测试事件内部的代码是否执行了它所应该做的事情?听起来你是想进行一个集成测试。 - Nope
我正在尝试测试单击事件处理程序是否会在单击事件发生时执行。 我正在通过“模拟”事件来实现这一点。 由于我没有真正的DOM,只有jQuery DOM,因此在这种隔离情况下,我认为这是一项单元测试。 我愿意听取建议。 - JayPrime2012
顺便说一下,我并不是在测试moo tools事件对象连接事件处理程序的能力,我更多地是确保它们确实被正确连接(即事件字符串名称没有拼写错误,并且没有意外分离或覆盖)。我认为这是一个有效的测试,不是吗? - JayPrime2012
在我看来,http://seleniumhq.org/ 是最好的。 - Ron van der Heijden
@Bondye,感谢提供链接。Selenium是一种完全不同于单元测试的工具 :) - JayPrime2012
1个回答

2

我发布了我的实际代码,因为".mouseenter() .mouseover()"似乎不起作用。你有什么建议吗?我做错了什么吗? - JayPrime2012
1
@Esailija,你确定触发器不会触发非jQuery事件吗?http://jsfiddle.net/oceog/sjQed/ - zb'
我想我应该更具体地说,悬停事件处理程序甚至没有被调用。(我在mouseenter的匿名事件处理程序中插入了一个断点,但它从未被触发。) - JayPrime2012
@mrjustinmooser,你能用控制台日志或警报进行一次健全性检查吗?这个jsfiddle尽可能简单并且它是有效的,所以肯定有其他问题。 - Esailija
这很公平,Esailija。触发回调的事件是同步操作,对吗? - JayPrime2012
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接