【问题标题】:using jasmine to mock ajax requests使用 jasmine 模拟 ajax 请求
【发布时间】:2014-12-23 09:55:38
【问题描述】:

我目前正在尝试使用 jasmine 测试我的 javascript 代码。到目前为止,我需要模拟 ajax 请求一直没问题。我目前使用 jasmine 1.2 和 mock-ajax.js 我的代码如下:

我有一个 handler.js 文件,它基本上有许多 ajax 请求。我正在使用 require.js 来读取具有相关 url 的配置 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' is not a function (evalating 'spyOn($, "ajax").andCallFake(function(options)

任何帮助都是灰色的

【问题讨论】:

    标签: javascript jquery ajax unit-testing jasmine


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

      How do I verify jQuery AJAX events with Jasmine?

      它帮助了我。

      【讨论】:

      • 只要考虑到所选答案已经过时并且不适用于 > 2.0 版本
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-02-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-27
      • 1970-01-01
      相关资源
      最近更新 更多