1

在运行我的 QUnit 测试套件时,我(第一次)检查了“Check for Globals”标志,一个测试变成了红色,因为我引入了一个全局变量,如下所示:

window.jQuery110007089870080817491

该名称与 $.expando 属性相同,并且看起来像是某种唯一标识符。

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

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

谢谢
/维克托

编辑:

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

<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 标志打开时,这(以及修改 jquery-ui 小部件的其他测试)将失败。我尝试在激活此标志的情况下运行 jquery-ui 自己的测试套件,但他们的测试也失败了。

如果有人对此有解决方法,那就太好了,否则我想我将不得不在运行涉及 jquery-ui 的单元测试时禁用 Check for Globals。

4

1 回答 1

0

在创建 spinner() 方法时,我发现了以下几行。

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   });

这将事件侦听器绑定到引入全局变量的窗口对象。如果您希望 QUnit 测试通过检查全局标志,您必须调用

$.spinner("destroy");

或其他 jquery-ui 小部件上的等价物,它们可以具有“自动完成”功能以清理窗口对象上的所有事件侦听器。

于 2013-08-01T07:55:19.007 回答