【问题标题】:QUnit strange behavior with fixture, tests alternately failing and passing夹具的 QUnit 奇怪行为,测试交替失败和通过
【发布时间】:2011-12-05 23:17:00
【问题描述】:

我在 QUnit 中有以下设置:

/* Dozen or so previous tests here */

test("Test some markup generation", function () {

    $('#qunit-fixture').plugin(); // jQuery plugin: Generates a table

    var rows = $('#qunit-fixture table tbody tr');
    count = rows.length;  // Count the rows
    console.log(count);

    equal(count, "96", "Expect the number of rows to be 96");
});

当它运行时,或者当我刷新浏览器时,它交替地失败了这个测试,显示 count = 0,或者通过了这个测试并失败了之前的所有测试。在测试之外没有定义全局变量。如果我手动将计数设置为 96,一切正常,或者如果我删除了这个测试,或者所有以前的测试,一切也都通过了。我想知道是否有人遇到过这种行为?我用过很多 QUnit,以前没有遇到过。

【问题讨论】:

  • 我不确定这是否是原因,但在这里将 count 声明为局部变量至少会更清晰。也许它与 qunit 使用的其他一些变量发生冲突。
  • 查看源代码,其中大量引用count,是否有冲突请自行检查:code.jquery.com/jquery-1.7.1.js
  • 还有一个“功能”,可让您单击测试报告中的一个测试,以仅选择该测试进行运行。我花了半个小时才弄明白为什么我看起来只有一次测试;-)
  • 可能是表格还没有完成生成?有没有可以从插件中使用的回调函数?
  • @The Nail 很好的建议,但是即使在本地声明它或命名它以避免冲突也不能解决问题。

标签: javascript jquery qunit


【解决方案1】:

好的,我弄清楚了问题所在,这与使用他们提供的固定元素有关。 QUnit 文档指出:

#qunit-fixture 元素可用于提供和操作测试标记,并在每次测试后自动重置

重置意味着它将被“清空”,不会重置您可能已添加到其中的任何其他属性。查看我的问题,您可以看到我正在将插件直接应用于夹具,并且所有添加的属性都在等待下一次测试导致这些问题。

在每次测试之前,我现在将一个新元素插入到夹具中并使用插件定位它:

$('#qunit-fixture').append('<div id="target"></div>');
$('#target').plugin();

这个添加的元素会在每次测试后被正确清除。虽然现在这似乎很明显,但我并没有从文档中立即清楚。

更新:

2012 年 2 月 14 日提交并拉入 QUnit 的更改:https://github.com/jquery/qunit/pull/195

谢谢,乔恩

【讨论】:

  • 更改已提交并拉取,但已于 2012 年 2 月 29 日恢复。这意味着上述不将插件和属性附加到 qunit-fixture 本身的解决方案仍然是必要的。
猜你喜欢
  • 2013-05-23
  • 1970-01-01
  • 2020-08-06
  • 2010-10-30
  • 2010-09-21
  • 2020-06-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多