2016-03-04 81 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值,即 它們執行回調時(稍後當循環結束時有 )時的值,而不是各自的值。