LoginSignup
26
26

More than 5 years have passed since last update.

Jasmineの非同期テストが1.3から2.0で変わった

Last updated at Posted at 2014-07-02

jasmineの1.3までは、非同期のテストをするのには、下記のようにしていました。

    describe("Async test",  function() {
        it ("async execution of test", function() {
            var flag = false;
            //非同期のメソッドをここで呼ぶ
            runs(function() {
                setTimeout(function() {
                    flag = true;
                }, 500);
            });

            //trueを返すか、タイムアウトするか待つ
            waitsFor(function() {
                return flag;
            }, "change flag", 600);

            //waitsForの結果を待つ
            runs(function() {
                expect(flag).toBe(true);
            });
        });
    });

最初のrunsで非同期の処理を開始します。
で、waitsForは非同期の処理が終わるかタイムアウトするか待ちます。
waitsForがtrueを返したら最後のrunsが呼ばれて結果を確認します。

しかし、2.0では、このrunsとwaitsForメソッドが定義されていません。
よって、2.0では上記のテストはそのまま使えないので書き直す必要があります。
以下は、2.0向けに書き直したものです。

    describe("Async test",  function() {
        var flag = false;
        beforeEach(function(done) {
            setTimeout(function() {
                flag = true;
                done();
            }, 500);
        });

        it ("async execution of test", function(done) {
            expect(flag).toBe(true);
            done();
        });
    });

beforeEach内で非同期処理を行います。
waitsForがなくなった代わりに、beforeEachに渡す関数の引数にdoneというオプショナルな引数があるので、
非同期処理が終わったらこの done を呼び出して上げます。
そうすると、itの処理が開始され、結果を評価します。
ここのitに渡す関数の引数にdoneを渡しましたが、
これはoptionalなので、渡さなくてもいいです。(一応渡せるということだけを書きたかっただけです。)

26
26
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
26
26