2016-03-04 44 views
0

我试图为QUnit测试做一些代码重构。我用了一个JSON数组TestCaseSource存储测试用例的输入和预期的输出,并且编码这样,在for循环中运行QUnit.test

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循环不起作用?

回答

2

我在Asynchronous Process inside a javascript for loop找到了我的答案。因为它说,在这个非常不错的职位:

你必须传递给函数的 某处所以它的价值,用于在功能闭合环路 的每一次迭代中唯一存在冻结我的价值。否则,所有异步回调只会看到 循环结束时的i值,即 它们执行回调时(稍后当循环结束时有 )时的值,而不是各自的值。