2016-08-10 7 views
0

を働いていない私は現在、コンクリートは、私は次の行を持って、非同期タスクを使用して何かをテストしようとしている:カルマジャスミン非同期テストは

setTimeout(function(){ 
//do something 
},300); 

setTimeoutは、同様の機能です。今私のテストでは、私はの内部で使用している要素が定義されていない/ null、setTimeoutを含むこの関数を呼び出し、私はエラーが発生しています。

私はいろいろ試しましたが、どれもうまくいかないようです。

私は私のitdoneが含まれており、これだけのように、のsetTimeoutで関数呼び出しを入れてみました:

setTimeout(function(){ 
    callTheFunctionThatContainsTheTimeout(); 
    done(); 
}); 

は動作しません。私は$timeout(私は実際に角を使用しています)をインポートしようとした後、$timeoutに関数呼び出しを入れて、$timeout.flushを入れましたが、何も動作しません。誰が私が間違っていることを知っていますか、どうすれば正しいことができますか?

+0

非同期ジャスミンテストでスタンドアロンタイムアウトを使用することはできません。[そのAPIドキュメント](http://jasmine.github.io/2.4/introduction.html#セクション - Asynchronous_Support)あなたは 'done'関数を渡し、タイムアウトの中でdoneを呼び出す必要があります。 – evolutionxbox

+0

私はあなたが間違っていると理解していますか、間違っていると理解しています。すでに、setTimeoutを使用する関数を呼び出した後に、それを渡して呼び出しています。私は間違ったことを理解しましたか? – user5638730

+0

本当ですか?あなたの例では明らかではありません。 – evolutionxbox

答えて

0

あなたが本当に別のタイムアウト内からタイムアウトが含まれている関数を呼び出すためのものかどうかは知りませんが、あなたはcallTheFunctionThatContainsTheTimeout機能を変更することが許可されている場合は、とにかくこれは、実現可能です。

関数は次のようになります。

function callTheFunctionThatContainsTheTimeout(callback) { 
    setTimeout(function(){ 
    console.log('ooo'); // do something here 
    callback(); // execute a callback function 
    },300); 
} 

とテストは次のようになります:

it('something to do', function(done){ 
    setTimeout(function(){ 
    callTheFunctionThatContainsTheTimeout(function(){ // the callback function 
     expect(2+2).toEqual(4); // do your tests here 
     done(); 
    }); 
    },200); 
}); 

そして、あなたは秒のタイムアウトを必要としない場合、テストは次のようになります。

it('something to do', function(done){ 
    callTheFunctionThatContainsTheTimeout(function(){ // the callback function 
    expect(2+2).toEqual(4); // do your test here 
    done(); 
    }); 
});