2016-07-26 10 views
2

私はforループを使ってテストを動的に生成しようとしていますが、生成するテストの数は非同期タスクから得られます。ここに私のコードは次のとおりです。それはforループに到達したときにMochaで 'describe'の前に非同期コードを実行しています

var noOfTestsToRun; 

before(function() { 
    return someAsyncTask().then(function(result) { 
     noOfTestsToRun = result; 
    }) 
}); 

describe('My Test Suite', function() { 
    for (var i = 0; i < noOfTestsToRun; i++) { 
     it('Test ' + i, function() { 
      //... 
     }); 
    } 
}); 

しかし、noOfTestsToRun = resultは実行されていないようです。

この種の問題に対する解決策があるかどうかは疑問でした。ありがとうございました。

+0

メフディは、上記のリンクは前にすべての非同期タスクの実行については 'それは、鉱山は、「説明」 – batluck

+0

ルイの前に非同期タスクの実行についてですが、それは動作しますが、どうもありがとうございました。しかしもう1つの質問ですが、別の 'describe'の中で' describe'の前に非同期タスクを実行したいのですが? – batluck

+0

最初に非同期コードを実行し、 'before'、' describe'、allのような 'mocha'をすべて定義します。 – MarcoL

答えて

0

doneコールバックをbefore関数に渡します。あなたの非同期タスクが終了するとdone()が呼び出されると

var noOfTestsToRun; 

before(function(done) { 
    return someAsyncTask().then(function(result) { 
     noOfTestsToRun = result; 

     // Complete the async stuff 
     done(); 
    }) 
}); 

describe('My Test Suite', function() { 
    for (var i = 0; i < noOfTestsToRun; i++) { 
     it('Test ' + i, function() { 
      //... 
     }); 
    } 
}); 

、我々は非同期のものが終了すると、それは期待に進むことができていることモカを語っています。

UPDATE

だから、あなたの目標は、モカがあなたの動的なテストを実行することです。

これは少しハックで達成できます。 beforeを強制的に実行するには、itブロックが必要です。以前は、非同期の結果に基づいて、itのテストを動的に生成することができます。

before(function() { 
    return someAsyncTask().then(function(result) { 
     describe('My Test Suite (dynamic)', function() { 
      for (var i = 0; i < result; i++) { 
       it('Test ' + i, function() { 
        // ... 
       }); 
      } 
     }); 
    }); 
}); 

it('should force before to execute', function() { 
    console.log('Hack to force before to execute'); 
}); 

Working pen

+0

ご返信ありがとうございます。しかし、それは動作していません。 'someAsyncTask()'を 'Promise.resolve(1)'に置き換え、あなたの解決策を試しました。 'for'ループに到達すると' noOfTestsToRun'は未定義です – batluck

+1

これを試してみようhttp://stackoverflow.com/questions/22465431/how-can-i-dynamically-generate-test-cases-in-javascript-node – Prashant

+0

上記の解は、テストを生成するための 'forEach'のための定数値' ['nl'、 'fr'、 'de'] 'を持ちます。私の場合、非同期タスクの値が必要です。それは私の問題を解決しません。 – batluck

関連する問題