2016-05-02 16 views
1

jasmine-ajaxライブラリでJavaScriptコードをテストするとき、私はajaxレスポンスを模倣することができます。特に、私は特定のAjaxリクエストに与えられる応答を定義することができます。Jasmineを使用してJSでAJAX呼び出しをテストするとき、。andReturn(...)と.respondWith(...)の違いは何ですか?

アプローチ#1:

jasmine.Ajax.requests.mostRecent().respondWith({ 
    status: 200, 
    contentType: 'text/plain', 
    responseText: 'my response' 
}); 

アプローチ#2:これを行うの(少なくとも)2種類の方法があるようです

jasmine.Ajax.stubRequest('my/url').andReturn({ 
    'responseText': 'my response' 
}); 

mostRecent要求がURLにある場合my/url、これらの2つの違いは他に何ですか?

ME Trostlerの「JavaScript Unit Testing」ビデオシリーズでは、これらの2つのアプローチについて紹介されていますが、私の質問には、これらのビデオ、StackOverflowの検索、またはそのajax.jsプラグインのJasmineオンラインドキュメント。

答えて

1

自分自身でさらに掘り下げた後、私はこれらの2つのコマンドの違いは、少なくとも部分的に嘲笑されたajax呼び出しの応答のタイミングにあると信じています。要するに:

  • respondWithは今、過去の未回答AJAX呼び出しに応答を送信し、
  • andReturnが送信されている将来のAJAX呼び出し時にすぐに送信される応答を確立します。 onreadystatechangeハンドラ内のコールバックは、このような応答は、コールバックをトリガするように、AJAX呼び出しに対する応答が返されたか否かを示すことを確認し、以下の2例において

、。アプローチ#1では、ajax呼び出しが送信されますが、respondWithが呼び出されるまで応答されません。アプローチ#2では、応答はあらかじめ設定されており、ajax呼び出しが送信されるとすぐに応答が返されます。

アプローチ#1:

setUpAndSendAjaxCall1(); 
expect(onreadystatechangeCallback1).not.toHaveBeenCalled(); 
jasmine.Ajax.requests.mostRecent().respondWith({ 
    ... 
    "responseText": "response #1" 
}); 
expect(onreadystatechangeCallback1).toHaveBeenCalledWith("response #1"); 

アプローチ#2:

jasmine.Ajax.stubRequest(myUrl).andReturn({ 
    ... 
    "responseTest": "response #2" 
}); 
setUpAndSendAjaxCall2(); 
expect(onreadystatechangeCallback2).toHaveBeenCalledWith("response #2"); 
関連する問題