jQueryUI小部件的创建使带有检查全局活动的Qunit测试失败

jQueryUI小部件的创建使带有检查全局活动的Qunit测试失败,jquery,jquery-ui,qunit,Jquery,Jquery Ui,Qunit,在运行我的QUnit testsuite时,我第一次检查了Check for Globals标志,测试变为红色,失败原因是我引入了一个全局变量,如下所示: window.jQuery110007089870080817491 该名称与$.expando属性相同,并且似乎是某种唯一标识符 我已尝试调试测试,但无法确定此属性何时添加到窗口对象 我想知道是否有人知道这是什么,它的用途是什么,以及是什么导致它被添加到窗口对象而不是被删除 谢谢 /维克多 编辑: 当这种情况发生时,我设法创建了一个最小的

在运行我的QUnit testsuite时,我第一次检查了Check for Globals标志,测试变为红色,失败原因是我引入了一个全局变量,如下所示:

window.jQuery110007089870080817491
该名称与$.expando属性相同,并且似乎是某种唯一标识符

我已尝试调试测试,但无法确定此属性何时添加到窗口对象

我想知道是否有人知道这是什么,它的用途是什么,以及是什么导致它被添加到窗口对象而不是被删除

谢谢 /维克多

编辑:

当这种情况发生时,我设法创建了一个最小的示例,这似乎是jQueryUI的一个问题

<html>
    <head>
        <title>Unit Tests</title>
        <link rel="stylesheet" href="css/lib/qunit/qunit-1.11.0.css" type="text/css" media="screen">
        <script type="text/javascript" src="js/lib/qunit/qunit-1.11.0.js"></script>
        <script type="text/javascript" src="js/lib/jquery/jquery-1.10.0.js"></script>
        <script type="text/javascript" src="js/lib/jquery/jquery-ui-1.10.3.custom.js"></script>
        <script>
        $(function() {
            test("Test spinner", function() {
                $("#spinner").spinner();
                ok(true);
            })
        });
        </script>
        <body>
        <h1 id="qunit-header">QUnit Test Suite</h1>
        <h2 id="qunit-banner"></h2>
        <div id="qunit-testrunner-toolbar"></div>
        <h2 id="qunit-userAgent"></h2>
        <ol id="qunit-tests"></ol>
        <div id="qunit-fixture">
            <input id="spinner" />
        </div>
    </body>
</html>
当启用QUnit Check for Globals标志时,修改jQueryUI小部件的测试以及其他测试都将失败。我试着运行jQueryUI自己的测试套件,激活了这个标志,他们的测试也失败了


如果有人对此有解决办法,那就太好了,否则我想我将不得不在运行涉及jquery ui的单元测试时禁用全局检查

在创建微调器方法时,我发现了以下几行

11063   // turning off autocomplete prevents the browser from remembering the
11064   // value when navigating through history, so we re-enable autocomplete
11065   // if the page is unloaded before the widget is destroyed. #7790
11066   this._on( this.window, {
11067      beforeunload: function() {
11068         this.element.removeAttr( "autocomplete" );
11069      }
11070   });
这会将事件侦听器绑定到引入全局变量的窗口对象。如果您希望在启用check for globals标志的情况下通过QUnit测试,则必须调用

$.spinner("destroy");

或者其他jQueryUI小部件上的等效程序,可以使用autocomplete清理窗口对象上的所有事件侦听器

它是用于JSONP请求的回调函数,它需要是一个具有唯一名称的全局函数。对,那么这个回调函数在什么时候被添加到窗口?现在我的一个单元测试失败了,因为它引入了这个全局变量。我想这与我如何模拟我的服务有关,在我完全理解正在发生的事情之前,我需要阅读JSONP。它将被添加到$.ajax.Yep的内部某个地方,我在上面。谢谢你的指点,当我发现发生了什么事情时,我会更新这个问题。好的,在示例代码中看起来你并不是在做jsonp请求。另一种可能的解释是,在window对象上存储了一些数据,如$.datawindow,…-afaik,这在您向其添加事件侦听器时已经发生了。