javascript - Jasmine - ajax spyon 错误请求

标签 javascript jquery ajax unit-testing jasmine

我正在尝试监视 ajax 错误请求并收到以下错误。你能帮忙吗?

TypeError: e.error 不是函数

待测JS代码:

function postSettings() {

        $.ajax(
            {
                type: "POST",
                url: EndPoints.Setup,
                data: frm_data,
                success: function (successData) {
                        ///// code is getting covered
                },
                error: function (errorData) {
                        ///// code is not getting covered
                }
            });
    }

Jasmine 规范:

describe("Call Success path", function () {
            var ajaxSpy;
            beforeEach(function () {
                var MockEndPoints = global.EndPoints = {};
                MockEndPoints.SnmpSetup = "/mock/test/setup";
                ajaxSpy = spyOn($, "ajax").and.callFake(function (e) {
                    e.success(globalFakeData);
                });
            });

            it("Should populate settings", function () {
                Setup.postSettings();
                expect($.ajax).toHaveBeenCalledTimes(2);
            });

        });

        describe("Call Error path", function () {
            var ajaxSpy;
            beforeEach(function () {
                var MockEndPoints = global.EndPoints = {};
                MockEndPoints.SnmpSetup = "/mock/test/setup";
                ajaxSpy = spyOn($, "ajax").and.callFake(function (e) {
                    **e.error; // No error but the path is not covered**
                    **e.error(globalFakeData); // throws the above error**
                });
            });

            it("Should populate settings", function () {
                Setup.postSettings();
                expect($.ajax).toHaveBeenCalledTimes(1);
            }); 
        });

谢谢。

最佳答案

我强烈建议不要尝试直接监视/ stub $.ajax 方法,而是使用 jasmine-ajax图书馆。

  • beforeEach 中执行:jasmine.Ajax.install()

  • 运行您的测试代码,您可以使用 var request = jasmine.Ajax.requests.mostRecent() 检查 ajax 请求是否已发出(并被拦截)。然后,您可以检查请求属性,例如 urlmethoddata()

  • 要模拟请求成功和失败,请使用 request.respondWith 并传入 status 代码和 responseText 正文。 200 状态将模拟成功; 4xx 或 5xx 范围将沿错误路径向下移动。然后,您可以测试您的成功错误 函数做正确的事情。

关于javascript - Jasmine - ajax spyon 错误请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36126894/

相关文章:

javascript - 蛋糕如何防止ctp元素在页面加载时显示

当 div 可见时,jQuery 将文本添加到 span

javascript - 如何用 IE 修复菜单栏 css-adapter 问题

javascript - jQuery 基本 ajax GET + php 返回

php - 为动态 html 表中的一列创建下载链接

javascript - 捕获对 jquery 的异步响应

javascript - 如何将函数移动到 MVVM 中的单独文件?

javascript - 如何从分组图像输入中获取 id

javascript - 映射时数组中特定元素的输入文本字段?

jquery - 将表单添加到页面后提交表单等