在JavaScript中测试异步Ajax的结果

时间:2012-06-01 22:08:25

标签: javascript jquery asynchronous

我有一个使用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帖子。)

1 个答案:

答案 0 :(得分:3)

您可以从populate_message_node()返回deferred object,然后按如下方式挂钩到完整事件。

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
    });
}