2

Jasmine を使用した jQuery AJAX 呼び出しの単体テストでは、通常、オプションを $.ajax() 関数に渡す前に、success 関数をスパイすることでうまくいきます (ネットやこのフォーラムには、それに関する多くの例があります)。

しかし、今回は独特の問題がありました。$.ajax に送信されるオプションは、jQuery プラグインの奥深くに埋め込まれ、複雑なロジックによって作成されます。成功関数にたどり着く唯一の方法は、$.ajax 自体をスパイして偽の関数を呼び出すことでした。

しかし、オプションが用意されたので、$.ajax 関数を呼び出すことができなくなりました。そのため、多くのWeb検索と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();
    })
}

$.ajax が呼び出される前に options.success() でオプションを傍受する方法がないことを考えると、これをより簡単に行うことができますか?

ありがとう、

レザ

4

0 に答える 0