Jasmine - Ajax Spyon 错误请求

jasmine - ajax spyon the error request

本文关键字:错误 请求 Spyon Ajax Jasmine      更新时间:2023-09-26

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

类型错误: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
                }
            });
    }

茉莉花规格:

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

谢谢。

我强烈建议不要尝试直接监视/存根$.ajax方法,而是使用Jasmine-ajax库。

  • beforeEach做:jasmine.Ajax.install() .

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

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