模拟单元测试的DOM事件的最佳方法?

时间:2012-12-05 13:34:52

标签: javascript jquery events

我正在使用moo4q + jquery,使用qUnit + sinon测试框架。

目前要触发点击事件,我已完成以下操作:

object.jThis.click(); // simulate a click event

其中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");
});

1 个答案:

答案 0 :(得分:2)

hover()不是.on( "mouseenter mouseleave")的事件而是糖,您可以通过触发.mouseenter()进入阶段触发悬停,.mouseleave()表示离开阶段

请参阅:http://api.jquery.com/hover/

演示:http://jsfiddle.net/2ZLMJ/