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なので、渡さなくてもいいです。(一応渡せるということだけを書きたかっただけです。)