jQuery焦点事件似乎在qUnit测试中不起作用

时间:2013-10-18 10:01:04

标签: javascript jquery qunit

我刚开始使用qUnit测试框架,但我一直坚持非常奇怪的行为。我想模拟DOM元素焦点事件,因为它在我要测试的应用程序中使用。但似乎焦点事件不会传播到订阅对象。例如,我有这个简单的代码片段:

$("#myinput").on("focus",function()
{
    $("#myinput").val("focus triggered");
});
$("#myinput").trigger("focus");

这在简单的javascript文件jsfiddle here中工作正常。但是当我尝试在qUnit测试函数中运行类似的代码时,永远不会调用焦点事件处理程序。我的qUnit测试看起来像这样:

test("trigger test", function ()
{
    expect(1);
    $("#customerInput").on("focus", function()
    {
        ok(true, "focus trigerred");
    });
    $("#customerInput").focus();
});

但是从不调用ok函数,测试总是失败,因为它需要一个断言。有没有解决方法如何在qUnit测试中模拟火焦点事件?

修改

我尝试触发并捕获自定义事件,让我们说$("#customerInput").trigger("myevent")$("#customerInput").on("myevent", function() {...})并且它可以正常工作。这意味着问题与焦点事件直接相关。

1 个答案:

答案 0 :(得分:4)

我使用JQuery的trigger()函数实现了这个:

var focusEvent = $.Event("focus"),
   $input = $('#id-of-input-to-focus-on');

$input.trigger(focusEvent);

这允许测试在关注文本输入字段时触发的JavaScript函数,例如。

用于测试用户互动的QUnit文档是here