javascript - Jasmin spy 监听 AJAX 无法读取未定义的属性 'done'

标签 javascript jquery ajax jasmine

我试图通过监视 jQuery 的 ajax 方法来检查数据是否发送到服务器。一切正常,直到我向 ajax 帖子添加“完成”功能为止。

我从 Jasmine 得到的错误是:TypeError: Cannot read property 'done' of undefined

Jasmine 规范:

describe("Post New Project Definition", function () {
    it("should post to GeoServer", function () {

        var information = {"i am": Math.random()};

        spyOn($, "ajax");

        addProjectDefinition.send(information);

        expect($.ajax).toHaveBeenCalledWith({
            method: "POST",
            url: "../svir/add_project_definition",
            data: information
        });

    });
});

我的 Ajax 调用:

function addProjectDefinition() {}

    addProjectDefinition.send = function(information) {
        var foobar = $.ajax({
            method: "POST",
            url: "../svir/add_project_definition",
            data: information
        });

        // NOT WORKING
        foobar.done(function(){
            console.log('Hi I'm done:');
        });

};

最佳答案

您应该在测试中替换此行:

spyOn($, "ajax");

与:

spyOn($, "ajax").and.callFake(function() { return { done: function() {}}});

关于javascript - Jasmin spy 监听 AJAX 无法读取未定义的属性 'done',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30484218/

相关文章:

php - 动态下拉菜单

javascript - 使用 meteor 在全日历中添加事件

javascript - 遍历数组以尝试页面上的多个选项并返回到每次迭代的初始页面

javascript - 在 Javascript 中添加类之间的 CSS 转换

javascript - 单击时在同一函数中包含可选类

jquery - ajax请求发送时如何执行一些操作?

javascript - 在 JavaScript 中用一些空元素声明数组时发生了什么

javascript - 如何改进 JavaScript 的结构以更好地利用 OOP

javascript - 下载使用 jquery 的 .innerhtml 制作的文件在第一个 "#"处中断

php - Wordpress - 在 Woocommerce 上使用 Ajax 添加到购物车按钮简码