2016-11-14 9 views
1

Jestjsでより多くのデータ駆動型テストを書く方法はありますか?データ駆動型Jestjsテスト

私はこのような何かを思い付いた:

it('assignments and declarations',() => { 

    testCases.forEach(function (testCase) { 
     const slx = fs.readFileSync(testDirectory + 'slx/' + testCase.slx, 'utf-8'); 

     const document = compiler.parse(slx); 

     const lmsGenerator = new LMSGenerator(document); 
     const lms = lmsGenerator.generate(); 

     const expected = fs.readFileSync(testDirectory + 'lms/' + testCase.lms, 'utf-8'); 

     expect(expected).toBe(lms); 
    }); 
}); 

私は、ファイルのうち入力と期待される出力をお読みください。ファイル(および入力と出力の間のリンク)はオブジェクトとともに配列に保存されます。問題は、私が複数のit()関数で持っていた特定のエラーメッセージを失ったことです。

これを行う方法はありますか?あるいは、個々のメッセージを使用して、expected-callが失敗するケースもあります。

答えて

3

すべてのテストケースに対してitブロックを作成し、describeブロックにバンドルします。これで、破損したケースごとにエラーメッセージが表示され、最初の失敗後にテストが停止することはありません。

describe('assignments and declarations for',() => { 
    testCases.forEach(function (testCase) { 
    it(`case ${testCase}`,() => { 
     const slx = fs.readFileSync(testDirectory + 'slx/' + testCase.slx, 'utf-8'); 
     const document = compiler.parse(slx); 
     const lmsGenerator = new LMSGenerator(document); 
     const lms = lmsGenerator.generate(); 
     const expected = fs.readFileSync(testDirectory + 'lms/' + testCase.lms, 'utf-8'); 
     expect(expected).toBe(lms); 
    }); 
    }); 
}); 
+0

私はそれを試して「あなたのテストスイートに少なくとも1つのテストが含まれている必要があります。私がtestCases.forEachコールを "偽の"ブロックでカプセル化しているとき、innerブロックはカプセル化されたブロックにエラーを報告することはありません。 – FDeitelhoff

+0

ここにはjasmineを使った例があります:https://jsfiddle.net/3VuGs/402/。冗談はジャスミンを使用し、私はテストの冗談テストスイートでも同じことをしましたが、なぜあなたのためにうまくいかないのか分かりません。 jestがテストを開始するかどうかを確認するために 'it'ブロックの中にログを追加できますか? –

+0

これは興味深いことです。私は私の環境でそれを実行することはできません。しかし、すべてが正しく設定されているかどうかはわかりません。現時点では、WebStormにjest npmモジュールを使用しています。私はpackage.config: "scripts":{ "test": "jest"}の単純なエントリを使ってテストを開始しています。 – FDeitelhoff

関連する問題