我有一个使用 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/