Модульное тестирование функции успеха вызова ajax в плагине Jquery с использованием фреймворка Jasmine - PullRequest
2 голосов
/ 05 августа 2011

В модульном тестировании вызовов 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, это можно сделать проще?

Спасибо

Рез

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...