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

标签 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 帖子。)

最佳答案

您可以返回 deferred object来自 populate_message_node() 然后按如下方式 Hook 完整事件。

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

关于javascript - JavaScript中异步Ajax调用的测试结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10857943/

相关文章:

javascript - 如何使用更改方法更改 DropDownList 的选定值?

iphone - Coredata 更新后一致更新 UITableview

c# - .Wait() 和 .GetAwaiter().GetResult() 有什么区别?

javascript - 无法使用 npm 中的 "ftp"包连接到 ftp 服务器

javascript - 在 ajax 请求中动态刷新和清除 JQuery 选择的插件

javascript - 当我使用 JavaScript 提交时,为什么我的表单仍然重置?

javascript - 通过 ajax 调用在 componentDidMount 中正确设置测试状态

javascript - 在哪里可以找到包含 ECMAScript 5 函数的引用表?

javascript - 我的 select2 jquery 仅适用于第一种形式

javascript - 如何手动使用 Protractor ExpectedCondition?