簡単な質問:
sinon.js で javascript をテストして、次の$.ajax
2 つのことを行いながらメソッドが呼び出されることを確認します。
- 実際にサーバーにアクセスしたくない
- サーバーからの応答をモックアップしたい
だからここにJSがあります:
$.ajax
url: "/tickets/id.json"
dataType: 'json'
.done (data) =>
HandlebarsTemplates["tickets/popup_title"] data
ここに私のテストがあります:
describe 'PopupDisplayer', ->
beforeEach ->
loadFixtures 'popup_displayer'
new PopupDisplayer
@title_stub = sinon.stub( HandlebarsTemplates, "tickets/popup_title")
@jquery_stub = sinon.stub(jQuery, 'ajax').yieldsTo('done', {})
//This triggers the ajax call
$('.popupable .title').mouseenter()
afterEach ->
HandlebarsTemplates['tickets/popup_title'].restore()
HandlebarsTemplates['tickets/popup_content'].restore()
jQuery.ajax.restore()
@server.restore()
it 'renders the title with the data returned from the server', ->
expect(@title_stub).toHaveBeenCalledWith( {})
このテストは失敗しましたが、次の例外がありました:
TypeError: ajax expected to yield to 'done', but no object with such a property was passed. Received [[object Object]]
.done
したがって、jQueryリクエストをモックアップして、呼び出しに正常に応答できる応答を取得できるかどうか疑問に思っていると思いますが、defferedObject()
十分に理解していないようです。