使用jasmine来模拟ajax请求

时间:2014-12-23 09:55:38

标签: javascript jquery ajax unit-testing jasmine

我目前正在尝试使用jasmine测试我的javascript代码。直到现在我还需要模拟ajax请求。我目前使用jasmine 1.2和mock-ajax.js我的代码如下:

我有一个handler.js文件,它基本上有很多ajax请求。我正在使用require.js来读取具有相关网址的config js文件。

define(['urlConfig'], function (urlConfig) {
    return {
        getAllCustomers: function () {
            return $.ajax({
                url: config.url,
                dataType: 'json',
                xhrFields: {
                    withCredentials: true
                },
            });
        }
}

所以基本上我现在已经创建了一个规范来测试ajax请求是否会被命中。

define(["/../dependencies/squire.js"], function(Squire) {
    var injector;

    beforeEach(function() {
        injector = new Squire();
        jasmine.Ajax.install();
    });

    describe("handler", function() {
        var mockData = {
            data: [
                {
                    reference: "ref1",
                    name: "bob"
                },
                {
                    reference: "ref2",
                    name: "fred"
                }
            ]
        }


        function loadModule() {
            mockHandler();
        }


        function mockHandler() {
            injector.mock('handlers/Handler', {
                getAllCustomers: function() {
                    return {
                        then: function(callback) {
                            callback(mockData);
                        }
                    }
                }
            });
        };

        describe("get all customers", function() {
            beforeEach(function() {
                loadModule();

            });

            it('expect to get all account details on request', function() {
                spyOn($, "ajax").andCallFake(function(options) {
                    options.success();
                });

                var callback = jasmine.createSpy();

                mockHandler().getCustomerDetails(callback);
                expect(callback).toHaveBeenCalled();
            });
        });
    });
});

不确定上述内容是否正确,但也会收到错误消息 TypeError:' undefined'不是一个函数(评估' spyOn($," ajax")。和CallFake(函数(选项)

任何帮助都是好的

2 个答案:

答案 0 :(得分:2)

在Jasmine 2.0版中,函数.andCallFaketo()更改为.and.callFake()。像这个例子:

spyOn().and.callFake(function() {
        return 1001;
});

答案 1 :(得分:0)

如果您需要帮助模拟jQuery ajax调用,请检查以下问题:

How do I verify jQuery AJAX events with Jasmine?

它帮助了我。