2

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

感谢您的任何帮助。

4

1 回答 1

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"}
于 2012-07-19T02:00:53.363 回答