QUnit不一致/交替地失败测试

时间:2013-05-08 15:28:51

标签: javascript jquery unit-testing qunit

我有一个简化的QUnit测试,它由2个简单的测试组成,这些测试无缘无故地交替失败(它们都是原子的,意味着一个测试不会改变其他元素的任何内容)

请参阅 this jsFiddle 多次尝试运行

module("Basic actionBind");
//two simple tests
test("action1", function() {
    ok(ele2.trigger("click").hasClass("clicked"), "basic click action");
});

test("action2", function() {
    ok(ele1.click().hasClass("clicked"), "basic click action");
});

2 个答案:

答案 0 :(得分:8)

问题在于在运行时缓存全局上下文中的jQuery对象。以下是代码中的两个代码段(来自问题中的链接:http://jsfiddle.net/adardesign/aZRK7/12/):

HTML:

<div id="qunit-fixture">
    <span id="ele1" class="action" data-action="action1"></span>
    <span id="ele2" class="action" data-action="action2" ></span>
</div>

JS:

// caching elements
var $ele1 = $('#ele1'),
    $ele2 = $('#ele2');

test('action1', function() {
    ok($ele2.trigger('click') ....


test('action2', function () {
    ok($ele1.trigger('click') ....

实际元素在#qunit-fixture内部,为每个测试重置并重新解析,因此从测试内部触发的单击事件在现在不再在{{1 }}。相反,这些元素已经分离,document已经从原始的html文本中重新解析,从而创建了新的DOM元素。

我已经分叉你的jsFiddle并相应修改它:http://jsfiddle.net/aZRK7/15/

虽然我在注意到它之前清理了各个部分,但基本的改变是将元素的查询移到测试内部:

#qunit-fixture

答案 1 :(得分:0)

编辑:看起来OP取出了代码的异步部分,留下答案,以防任何绊倒,但它现在没有回答问题。

好吧,我不确定您可能会遇到哪些问题,但是任何AsyncTest都必须在某个地方进行start();调用。所以从你的小提琴:

asyncTest("action1", delay.bind(null, function() {
  console.log("test1");
  ok(ele2.trigger("click").hasClass("clicked"), "basic click action");

  start();

}, 2000*Math.random()));

QUnit asyncTest documentation开始,查看他们的示例。

相关问题