2012-03-01 39 views
1

私は、n回、m秒で呼ばれていることを確認して、非同期コールバックをテストしようとしています。非同期コールバックをテストするにはどうすればよいですか?

test("async callback", function() { 
    expect(1); 
    var called = 0; 

    var callback = function() {called++;}; 

    var model = new Model(callback); 
    model.startCallbacks(); 

    function theTest() {   // call this a few seconds later and verify 
     model.stopCallbacks(); // that the callback has been called n times 
     equal(3, called, "number of times callback was called"); 
    } 

    setTimeout(theTest, 10000); // wait about 10 seconds until calling theTest 
}); 

model.startCallbacksmodel.stopCallbackssetIntervalで実装されている。)これは動作しません

ここでは、これまでに私のコードです。 callbackがまだ非同期に実行されている間は、実行がテスト機能の終了から外れるためだと思います。

私がテストしたいもの:そのmodelは、正しくcallbackを呼び出しています。これはどうすればいいですか?

あなたがスタートを使用して、非同期のテストのための機能を停止する必要があります
+0

私はRTFMする必要があります。どのように恥ずかしい。 –

答えて

4
// use asyncTest instead of test 
asyncTest("async callback", function() { 
    expect(1); 
    var called = 0; 

    var callback = function() {called++;}; 

    var model = new Model(callback); 
    model.startCallbacks(); 

    function theTest() {   // call this a few seconds later and verify 
     model.stopCallbacks(); // that the callback has been called 
     equal(3, called, "number of times callback was called"); 

     // THIS IS KEY: it "restarts" the test runner, saying 
     // "OK I'm done waiting on async stuff, continue running tests" 
     start(); 
    } 

    setTimeout(theTest, 10000); // wait about 10 seconds until calling theTest 
}); 
2

docsを参照)、例:

test("a test", function() { 
    stop(); 
    $.getJSON("/someurl", function(result) { 
    equal(result.value, "someExpectedValue"); 
    start(); 
    }); 
}); 

あなたの例では、次のようになります。

test("async callback", function() { 
    stop(1); 
    var called = 0; 

    var callback = function() {called++;}; 

    var model = new Model(callback); 
    model.startCallbacks(); 

    function theTest() {   // call this a few seconds later and verify 
     model.stopCallbacks(); // that the callback has been called n times 
     equal(3, called, "number of times callback was called"); 
     start(); 
    } 

    setTimeout(theTest, 10000); // wait about 10 seconds until calling theTest 
}); 

また、ショートカットasyncTestを使用することができます。

関連する問題