JavaScript 中异步 Ajax 调用的测试结果

Test result of asyncronous Ajax call in JavaScript

本文关键字:测试结果 调用 Ajax 异步 JavaScript      更新时间:2023-09-26

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

您可以从 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
    });
}