1

このスペック出力を実行すると、「Expected 0 to equal 2.」が表示されます。2 はフィクスチャのモデル オブジェクトの正しい長さであるため、Sinon の fakeServer はモックされた応答で適切に応答しています。フェッチ後にコレクションにオブジェクトがない理由がわかりません。どんな助けでも本当に感謝します!

参考までに: これは、バックボーン シノン + ジャスミンのチュートリアル ( http://tinnedfruit.com/2011/03/25/testing-backbone-apps-with-jasmine-sinon-2.html ) に沿って作成したものです。

仕様:

describe "Todos collection", ->

  describe "when fetching models from the server", ->
    beforeEach ->
      @todo = sinon.stub(window, "Todo")
      @todos = new Todos()
      @fixture = @fixtures.Todos.valid
      @server = sinon.fakeServer.create()
      @server.respondWith "GET", "/todos", @validResponse(@fixture)

    afterEach ->
      @todo.restore()
      @server.restore()

    it "should parse todos from the response", ->
      @todos.fetch()
      @server.respond()
      expect(@todos.length).toEqual @fixture.response.todos.length

モデル:

class window.Todos extends Backbone.Collection
  model: window.Todo
  url: "/todos"
  comparator: (todo) ->
    todo.get('priority')
  parse: (res) ->
    res.response.todos

編集:

以下の Buck Doyle は、仕様上の問題がないことを確認するのに役立ちました。Jasmine ヘッドレス Webkit 構成に何らかの問題があり、仕様が Jasmine スタンドアロンで実行されている場合は合格です。

4

1 に答える 1

2

理論: 結果をチェックする前に、「サーバー」がリクエストに応答するのを待つ必要があります。応答をモックするだけでは十分ではありません:fetchはまだ非同期です。

https://github.com/pivotal/jasmine/wiki/Asynchronous-specsで説明されているように、waitsまたはより複雑だがエレガントなものを試してください。waitsFor

于 2012-05-09T17:53:56.983 に答える