【问题标题】:Preventing AJAX call with Jasmine and Sinon using Backbone使用 Backbone 防止 Jasmine 和 Sinon 的 AJAX 调用
【发布时间】:2012-07-18 21:53:24
【问题描述】:

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

感谢您的帮助。

【问题讨论】:

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


    【解决方案1】:

    在底层,Backbone 使用 jQuery 的 $.ajax 方法,因此您可以将其排除。我们使用它来捕获 Jasmine 规范中的意外调用:

    $.ajax = -> throw "ajaxShouldBeStubbedOutError: #{JSON.stringify arguments}"
    

    然后,如果您想伪造 AJAX 调用及其响应,则可以对其进行存根:

    spyOn($,'ajax').andCallFake (options) =>
      if options.url is "/correct"
        options.success {"data":"yay"}
    

    【讨论】:

      猜你喜欢
      • 2014-01-11
      • 2013-10-16
      • 1970-01-01
      • 2014-07-12
      • 1970-01-01
      • 1970-01-01
      • 2013-08-11
      • 2012-05-19
      • 2017-09-08
      相关资源
      最近更新 更多