1

我刚刚开始使用 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() {...})它可以工作了。这意味着问题在某种程度上与焦点事件直接相关。

4

1 回答 1

4

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

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

$input.trigger(focusEvent);

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

用于测试用户交互的 QUnit 文档在这里

于 2014-01-06T15:42:26.780 回答