jasmine - ajax spyon错误请求

时间:2016-03-21 09:13:38

标签: 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
                }
            });
    }

茉莉花规格:

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

感谢。

1 个答案:

答案 0 :(得分:3)

我强烈建议您不要直接监视/ stub $.ajax方法,而是使用jasmine-ajax库。

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

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

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