【发布时间】:2012-06-13 23:43:07
【问题描述】:
足够简单的问题:
我希望我们 sinon.js 测试一段 javascript 以确保它在做两件事时调用$.ajax 方法:
- 我不想真正访问服务器
- 我想模拟来自服务器的响应
这是 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]]
所以我想我想知道我是否可以模拟一个 jQuery 请求以获得可以成功响应 .done 调用的响应,显然我不太了解 defferedObject()。
【问题讨论】:
-
请don't add signatures or taglines to your posts。此外,不要将
<code></code>用于内联代码,而应使用`backticks`。
标签: jquery coffeescript jquery-deferred sinon