使用Backbone防止使用Jasmine和Sinon进行AJAX调用

时间:2012-07-18 21:53:25

标签: unit-testing backbone.js coffeescript jasmine sinon

我刚刚开始使用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覆盖获取函数以返回虚假响应?

感谢您的帮助。

1 个答案:

答案 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"}