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を使用して、フェッチ関数をオーバーライドして偽の応答を返すことは可能ですか?

助けてくれてありがとう。

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 に答える