0

次のようにjQueryを使用する関数があります。

function populate_messages_node() {
    $.ajax({url: "/messages", type: "GET", success: populate_recent_messages});
}

この関数の統合テストを書きたいと思います。私の問題は、テスト:

function test_simple() {
    populate_messages_node();
    // assert node content here
}

... Ajax 成功メソッド (populate_recent_messages) が実行されるのを待ちません。この些細な例では、うまく$.ajaxSetup({async:false})いきますが、それが常に正しいとは限らないのではないかと心配しています. より複雑なシナリオでは、このようなテストが多数あります。

私の質問は本当に次のとおりだと思います: Javascript で XHR/Websocket 操作の完了を待つ方法はありませんか?

本番コード (populate_messages_node) を変更したくないのですが、.ajax() から xhr の結果を返すことは問題ありません。(この問題を正確に説明している正規の SO 投稿が見つからなかったことを事前にお詫びします。)

4

1 に答える 1

3

次のように、遅延オブジェクトを返し、populate_message_node()その後、完全なイベントにフックすることができます。

function populate_messages_node() {
    return $.ajax({url: "/messages", type: "GET", success: populate_recent_messages});
}

function test_simple() {
    populate_messages_node().complete(function(jqxhr){ 
    // assert node content here
    });
} 
于 2012-06-01T22:13:05.803 に答える