2014-01-17 13 views
11

メッセージを受信する前に若干の遅延があるので、postMessage APIをテストしようとしています。ジャスミン2.0期待通りに実行する前にリアルタイムで待つ方法

jasmine 1.3では、予想を実行する前に数ミリ秒待っていましたが、うまくいきました。しかし、jasmine 2.0ではwait()は廃止され、done()が呼び出されない限り、setTimeout内のすべてが実行されないように見えます。私の場合は魔法使いがカットしません。 ..

私はこれについてどうやって行くことができるかについてのいくつかの指針が大好きです。 ありがとう!

+0

私にはたくさんの質問がありますが、始めてください。なぜあなたはテストしてAjaxを呼びたくないのですか? – Dalorzo

+0

カルマかSpecRunner.htmlを使っていますか? – Dalorzo

+0

Ajaxコールの作成には何が使用されていますか? – Dalorzo

答えて

5

ジャスミンには、何ミリ秒も待つのではなく、関数が戻るまで待つフックがあります。 This pageには良い例があります。ここでは、Ajaxコールバックをテストする具体的な方法を示すためにここにコピーしました。あなたの関数にコールバックとしてスパイを追加し、そのコールバックが実行されるのを待つだけです。

it("should make a real AJAX request", function() { 
    var callback = jasmine.createSpy(); 
    makeAjaxCall(callback); 
    waitsFor(function() { 
     return callback.callCount > 0; 
    }, "The Ajax call timed out.", 5000); 

    runs(function() { 
     expect(callback).toHaveBeenCalled(); 
    }); 
}); 

EDIT:

、あなたのアプリケーションが特定のコールバックを作ることをテストしているので、あなただけの代わりに私がやったように、新しいものを作るのスパイとそのコールバックを置き換えることができます。 (私はこれの構文うまくいけば、良いスタートをテストしていない)

it("should make an ajax callback with jasmine 2.0", function(done)) { 
    // this is the object you are testing - assume it has the ajax method you want to call and the method that gets called when the ajax method is finished 
    var myObject 
    spyOn(myObject, "callback").andCallFake(function() { 
     done();   
    });  
    myObject.makeAjaxCall();  
} 
+0

のような小さな遅延があります。入力していただきありがとうございますJeff、私の場合は切り捨てません。私のパブリックAPIは、postMessageからのメッセージをリッスンし、他のメッセージを使用して応答します。特定のタイプのメッセージが受信されると、アプリケーションから適切な応答が返されることをテストできます。問題は、postMessage APIが到達するのに1,2ミリ秒ほどかかるため、私は待つ必要があるということです。あなたがリンクしているページの横にジャスミン1.3があり、使用されているメソッドは廃止されました – silkAdmin

+0

@silkAdmin私はいくつかの追加情報で投稿を編集しました。 –

+0

@silkAdmin提供された情報に基づいて、私はJeffStoreyアプローチがうまくいくと思います。私はジャスミン2.0を使用しています。と私は待っている利用可能 – Dalorzo

5

これがために働く:

ジャスミン2.0は、「完了」スタイルのコールバックを追加しましたので、あなたのような何かを行うことができるはず私:

beforeAll(function (done) { 
    setTimeout(done, 5000); 
}); 

beforeAll関数が最初に発生しましたが、doneコールバック関数を呼び出すと終了します。したがって、5000でsetTimeout関数を使用すると、5000ミリ秒待ってから続行します。

関連する問題