2013-10-18 38 views
1

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

$("#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() {...})和noow它的工作原理。这意味着问题直接与焦点事件有关。

+0

一些限制可能是.. – Stphane

+0

当dom准备就绪时,您确定您的测试正在运行吗? http://jsfiddle.net/tarabyte/CHEha/1/适合我。检查'console.log($(“#customerInput”).length);'如果这不是0. –

+0

我在jQuery DOM ready函数中调用所有测试函数。它很奇怪。我还发现了另一个奇怪的行为,请参阅我的更新。 –

回答

4

我实现了这个使用jQuery的trigger()功能:

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

$input.trigger(focusEvent); 

这使得那些专注于一个文本输入字段时,例如触发JavaScript函数的测试。

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

相关问题