Jasmineで非同期関数をテストする

Jasmineで非同期関数のテストをしてみた際のまとめ。

公式ページ

introduction-1.3.1.js(日本語翻訳版はこちら)。

導入手順

Javascriptテストフレームワーク Jasmineを試す | nacika」のページを参照しました。今回はstandalone版をダウンロードしてJavaScriptでテストを作りました。

 

非同期処理のテスト

タイマー処理や、FileI/Oの処理のテストにて非同期処理の関数呼び出した直後に結果確認が行われると、非同期処理が完了する前に結果確認が実行されてしまい、意図したテスト結果が得られないことがあります。

こういう時はWaitsFor , runs を使えば良いみたいです(非同期処理に関する記述)。WaitsForはreturn処理でtrueを返すまでポーリングを行い、WaitsFor以降のrunsの実行を待ってくれます。

 

非同期テストの例

 

    runs(function() {
      flag = false;
      value = 0;

      setTimeout(function() {
        flag = true;
      }, 500);
    });

    waitsFor(function() {
      value++;
      return flag;
    }, "Error: flag is false!!", 750);

    runs(function() {
      // 非同期処理完了後の試験
    });
処理概要

最初のrunsの引数内の処理で非同期関数(ここではsetTimeout) を呼び出します。

waitsForはflagがtrueになる、または750msec経過してタイムアウトが発生するまでポーリングします。waitsForが終了後、「非同期処理完了後の試験」のブロックが実行されます。

waitsForにてタイムアウトが発生した場合は、エラーメッセージ「Error: flag is false!!」が表示されます。