如何使用Jasmine测试jQuery beforeSend方法?

时间:2014-01-15 12:31:27

标签: jquery ajax unit-testing jasmine

我已经找到了test promises in jasmine的方法,但我找不到测试 beforeSend 方法的方法。

var xhr = $.ajax({
    url: 'http://example.com',
    type: 'POST',
    data: '...',
    beforeSend: function() {
        methodToBeTested();
    }
});

我确实需要在发送请求之前运行代码,因此使用始终承诺不是一种选择。

3 个答案:

答案 0 :(得分:2)

这是我的轻微感觉解决方案,但它对我有用。

it('test beforeSend', function() {

    spyOn(window, 'methodToBeTested')

    spyOn($, "ajax").andCallFake(function(options) {

        options.beforeSend();
        expect(methodToBeTested).toHaveBeenCalled();

        //this is needed if you have promise based callbacks e.g. .done(){} or .fail(){}
        return new $.Deferred();
    });

    //call our mocked AJAX
    request()
});

你也可以试试Jasmine AJAX插件https://github.com/pivotal/jasmine-ajax

答案 1 :(得分:0)

您可以使用:

if ( $.isFunction($.fn.beforeSend) ) {
//function exists
}

答案 2 :(得分:0)

或者您可以稍后访问传递给间谍ajax调用的参数:

$.ajax.calls.argsFor(0)[0].beforeSend();
//instead of argsFor(), you can use first(), mostRecent(), all() ...

如果您不希望每次调用beforeSend(),则会出现这种情况。