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()then 挂钩返回到完整事件,如下所示。

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 回答