2014-01-15 75 views

回答

2

這裏是我稍微hackie感覺解決方案,但它爲我工作。

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

+0

我喜歡它,因爲它很好,它的工作 –

0

您可以使用此:

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

這不回答這個問題。 – undefined

+0

@BlackSheep:爲什麼? –

0

或者您也可以訪問傳遞到暗中監視Ajax調用後的參數:

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

這是如果你不希望有beforeSend()調用的每個時間。

相關問題