我试图为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循环不起作用?
答案 0 :(得分:2)
我在Asynchronous Process inside a javascript for loop找到了答案。正如它在这篇非常好的帖子中所说:
您必须通过将i传递给函数来冻结它的值 在某处,所以它的值对于循环的每次迭代都是唯一的 在函数闭包中。否则,所有异步回调都会看到 循环结束时i的值,它是当它具有的值 他们执行回调(稍后循环时有。) 完成),而不是每个人都有自己的价值。