QUnit.test在for循环中运行

时间:2016-03-04 09:58:09

标签: javascript qunit

我试图为QUnit测试做一些代码重构。我使用了一个json数组TestCaseSource来存储测试用例的输入和预期输出,并像这样编码,

var data = TestCaseSource.data;

for (var i in data) {
    console.log(data[i]);
    QUnit.test(data[i].TestCaseName, function () {
        DoProcess(data[i].TestCaseName, "", data[i]);
    });
}

使用此代码,我只能运行第一个和最后一个测试用例。 QUnit省略了中间的所有案例。如果我删除了for循环,并且硬编码了QUnit.test,

    QUnit.test('TestCaseName1', function () {
        DoProcess('TestCaseName1', "", TestCaseSource.data[0]);
    });
    QUnit.test('TestCaseName2', function () {
        DoProcess('TestCaseName2', "", TestCaseSource.data[1]);
    });
    ...

一切都很好。为什么for循环不起作用?

1 个答案:

答案 0 :(得分:2)

我在Asynchronous Process inside a javascript for loop找到了答案。正如它在这篇非常好的帖子中所说:

  

您必须通过将i传递给函数来冻结它的值   在某处,所以它的值对于循环的每次迭代都是唯一的   在函数闭包中。否则,所有异步回调都会看到   循环结束时i的值,它是当它具有的值   他们执行回调(稍后循环时有。)   完成),而不是每个人都有自己的价值。