2017-01-16 15 views
0

非同期機能を持つコードに対してジャスミン仕様を作成したいと思っています。これで私の問題は、テストがenvirosで実行中setTimoutがsettimeoutなしのジャスミン非同期テスト

がある脆いすなわち、遅延可能性があり、行わ機能とのsetTimeoutを使用して

it("takes a long time", function(done) { 
      setTimeout(function() { 
      done(); 
      }, 9000); 
     }); 

:ジャスミンのドキュメントで

は、それは一例を示しています私がタイムアウトを使用する必要がないそのようなテストの代替ソリューション?この例では、事前

+0

非同期関数の結果を計算する方法 - コールバック、約束、待っているか? –

+0

[jasmine-co](https://www.npmjs.com/package/jasmine-co)をご覧ください。このnpmパッケージでは、 'yield'を使って' setTimeout() 'と' done() 'をドロップすることができます。 – jengeb

答えて

1

おかげでsetTimeoutは実際にテストされている機能です。これは、非同期関数の代表例として使用されています。要点は、テストが完了したときに明示的にdone()と呼ぶ必要があることです。文書化機能は、長時間実行される方法に従ってdoneコールバックを使用して説明することを意図している、とのために使用すべきではありません

it("takes a long time", function(done) { myMethod('foo', 'bar', function callback() { assert(...) done(); }); // callback-style }

it("takes a long time", function(done) { myMethod('foo', 'bar').then(function() { assert(...) done(); }); // promise-style });

it("takes a long time", async function(done) { await myMethod('foo', 'bar') assert(...) done() });

0

:あなたのコードは次のようになります実際のテスト。

通常、長時間実行される関数には、done関数を呼び出すコールバックが提供されると想定します。たとえば、データを書き込むために長い時間がかかったファイルを含むユニットテストを書くことができます:あなたは一般の本体内のファイルに書き込むのは嫌だと

it("writes a lot of data", function(done) { 
    var fd = 999; // Obtain a file descriptor in some way... 

    fs.write(fd, veryLongString, function (err, written, string) { 
    // Carry out verification here, after the file has been written 
    done(); 
    }); 

繰り返しますが、これは、例示にすぎませんユニットテスト。しかし、考えてみると、doneは長期間の操作の後に呼び出すことができます。

関連する問題