В модульном тестировании вызовов jQuery AJAX с Jasmine я обычно могу обойтись шпионажом в функции успеха, прежде чем передать параметры функции $ .ajax () (в сети и на этом форуме есть много примеров по этому поводу). ).
однако на этот раз у меня возникла особая проблема. параметры были отправлены в $ .ajax, где они глубоко спрятаны в плагине jQuery и созданы сложной логикой, и я единственный способ добраться до функции успеха - это шпионить за самим $ .ajax и вызывать поддельную функцию.
Но теперь, когда у меня были опции, я больше не мог вызывать функцию $ .ajax. так что после долгих поисков в Интернете и прочтения документации по API я наконец-то пришел к получению данных, которые будут возвращаться с сервера:
it('is going to steal the data returned from the server by ajax',function(){
var ajaxspy=spyOn($,'ajax');
ajaxspy.andCallFake(function(options){
ajaxspy.mysterious_options=options;
});
$(myelement).myjQueryPlugin(my_method_which_will_call_ajax_eventually);
spyOn(ajaxspy.mysterious_options,'success').andCallFake(function(data){
ajaxspy.stolen_data=data;
});
ajaxspy.andCallThrough();
ajaxspy.plan(ajaxspy.mysterious_options);
waitsFor(function(){
return ajaxspy.stolen_data;
})
runs(function(){
expect(data).toHaveSomeProperties();
})
}
Учитывая, что нет способа перехватить параметры, какие-либо шпионы для options.success () до вызова $ .ajax, это можно сделать проще?
Спасибо
Рез