2011-02-06 19 views
1

dojo xhrリクエストのレスポンスをモックしようとしていますが、良い解決策が見つかりませんでした。Dojo XHRでAJAX呼び出しをモックアウト

理想的には、私は例えば、私はURLに基​​づいて特定のコールを設定することができますjQueryのmockjax pluginに同様のソリューションを見てみたいと思います:

$.mockjax({ 
    url: '/restful/fortune', 
    responseTime: 750, 
    responseText: { 
    status: 'success', 
    fortune: 'Are you a turtle?' 
    } 
}); 

私の最初に考えたのは、「/道場を利用することでした/ io/send "チャネルを使用していましたが、dojo Deferredオブジェクトを変更した後に変更された応答をロードすることができませんでした。

他の思考は例えば、実際のXHR要求がなされるべきかどうかを判断でしょうパススルー方式を使用することです:

function xhrRequest(xhrArgs) { 
    if(shouldMock) { 
     var fakeReturnJson = dojo.toJson({ 
     howdy: "that's odd!", 
     isStrange: false 
     }); 
     return fakeReturnJson; 
    } else { 
     dojo.xhr(xhrArgs); 
    } 

} 

誰かが私に道場のXHR呼び出しをからかって行くための最善の方法を教えてもらえます?

ありがとうございます!

答えて

2

それは古い質問ですが、私はあなたが以下を配置する必要がありますしかし、あなたがSinon.js

を使用して、あなたのモックをやるべきだと思う:

has: { native-xhr2: false } 

あなたdojoConfigにそれが1.8

で動作するために
+0

面白いことに、私は嘲笑とスパイを助けるためにサイロンを使い始めました。私はjquery Mockjax版に基づいて自家製のモッキングソリューションをロールアップすることができましたが、確かにそれはsinonのXHRモッキングソリューションと同じくらいAPIでは堅実ではありません。 – rakis

0

私はMockjaxに似たDojo固有のライブラリについて聞いたことがありません。しかし、私があなたが試みることができると思うのは、DojoでMockjaxを使うことです。開発中にMockjaxでテストするためだけにJQueryを使用し、開発が完了したらJQueryを削除するだけで済むので、これはかなり簡単に行うことができます。

0

私はあなたの2番目の提案を使用します。現在、私はトランスポート層(単純なjsクラス)​​と2つの実装(XhrTransportとMockTransport)を持っています。ウィジェットコードを変更せずに必要なものを切り替えます。 aServerCallは、サーバエンドポイント、paramsパラメータとコールバックを持つ単純な値オブジェクトです

Controller.send(aServerCall); 

: ウィジェットはしてサーバーを呼び出します。

このようにして、すべてのサーバー呼び出し(ログ、アナリティクス、一般的なエラー処理など)に適用される素晴らしい機能をコントローラに追加し、単体テストの実行時にサーバー全体をモックアウトすることもできます。 MockTransportでは、静的な.jsファイルからcanned jsonデータをウィジェットが期待する形式で返すだけです。