我在測試中需要嵌套for循環的一點,但是我對整個Async方面感到迷茫。基本上現在發生的事情是我想遍歷一個數組,然後逐個使用值並記錄輸出。目前發生的情況是,唯一記錄的輸出是我想要使用的最後一個值。這很難解釋,所以我會演示我的代碼。在Node.js中沿着Mocha測試框架進行循環嵌套
// For the sake of it, all these values are strings
var arr1 = [ [1, 2, 3, 4], [2, 3, 4, 1], [3, 4, 2, 1], [4, 1, 2, 3] ];
var arr2 = [ [a, b, c, d], [b, c, d, a], [c, d, a, b], [d, a, b, c] ];
for(var i = 0; i < arr1.length; i++){
describe("Test", function(){
it("Does something", function(done){
for(var x = 0; x < arr2.length; x++){
it("Does something else", function(done){
// Do stuff with arr1[i], arr2[x] etc.
testFunc(arr1[i], arr2[x], function(returnValue){
assert.strictEqual(returnValue, true, "Passed!");
done();
}
});
}
});
});
}
現在,我無法去填補那些代碼實際上做(隱私的原因),但如果有人能指出我的方式,我可以使這項工作(指從testFunc()
回調循環等待每次)。
如果說testFunc()
如下:
function testFunc(arr1var, arr2var, callback){
console.log(arr1var + " and " + arr2var);
}
當我運行它,我看到的是傳遞給控制檯(「3和C」)的最終值。
我一直在尋找這個,但因爲人們的例子是如此特定於他們的代碼,這是混亂的嘗試和適應。我查看了Node.js Async
模塊,但並沒有得到很好的結果。
如果有人能夠一步一步地講述我,或者按照我想要的方式重寫上述內容,我會很感激。
此外,在我的實際代碼中,我的數組在頂部有不同的大小 - 以防萬一導致差異。
既然有幾個人指出了,我只是補充一點,如果有人有更好的方法,我完全接受建議。我將運行〜40次測試,這會將其削減到10-15行代碼,而不是每次調用200次代碼,因此無論人們認爲什麼是最好的,請隨時通知我。
這看起來像一個O(n!)實現。你確定沒有更好的方法嗎? –
@TravisJ在我的實際代碼中,我必須測試'arr1 [0]'和'arr2'中的所有元素,然後'arr1 [1]'和'arr2'中的所有元素一起測試,等等。總共應該有40個測試(在我的實際代碼中,不在這裏)。我不確定是否有更好的方法,你認爲會有嗎? – whitfin
使用循環來生成測試是一種代碼異味 –