我刚刚开始使用Sinon和Jasmine测试我的Backbone应用程序。我有一个看起来像(coffeescript)的观点:
initialize: ->
@collection.on 'reset', @render, this
render: ->
if @collection.fetched
# do stuff
else
@$el.append "<h3>Loading...</h3>"
@collection.fetch()
this
我想用一个不受约束的集合来测试它,但我不确定如何在我的代码中伪造ajax调用(显然可以在规范中轻松完成)。我意识到我可以传入一个预先获取的集合,但我很好奇 - 是否可以使用Sinon覆盖获取函数以返回虚假响应?
感谢您的帮助。
答案 0 :(得分:4)
在后台,Backbone使用jQuery的$.ajax
方法,因此您可以将其存根。我们使用它来捕捉我们的Jasmine规范中的意外调用:
$.ajax = -> throw "ajaxShouldBeStubbedOutError: #{JSON.stringify arguments}"
如果你想伪造一个AJAX调用及其响应,那么你可以将其存根:
spyOn($,'ajax').andCallFake (options) =>
if options.url is "/correct"
options.success {"data":"yay"}