我已经找到了test promises in jasmine的方法,但我找不到测试 beforeSend 方法的方法。
var xhr = $.ajax({
url: 'http://example.com',
type: 'POST',
data: '...',
beforeSend: function() {
methodToBeTested();
}
});
我确实需要在发送请求之前运行代码,因此使用始终承诺不是一种选择。
答案 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(),则会出现这种情况。