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() でオプションを傍受する方法がないことを考えると、これをより簡単に行うことができますか?
ありがとう、
レザ