2012-05-09 4 views
1

この仕様の出力を実行すると、「期待値0は2になります。 2は私のフィクスチャのモデルオブジェクトの正しい長さですので、SinonのfakeServerは模擬応答で正しく応答しています。なぜ私のコレクションがフェッチした後にオブジェクトがゼロであるのかわかりません。どんな助けでも本当にありがとう!これはここバックボーンSinon +ジャスミンのチュートリアルに沿って、次から来ている:http://tinnedfruit.com/2011/03/25/testing-backbone-apps-with-jasmine-sinon-2.htmlJasmine + Sinonの仕様では、バックボーンコレクションの取り込みが行われません

仕様:

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 

EDIT:

バックをFYI

下記のDoyleはスペックの問題がないことを私に助けてくれました。 Jasmine Headless Webkitの設定で何らかの問題が発生し、Jasmineスタンドアロンで仕様が実行されていれば、それらはパスします。

+0

で説明したようwaits以上のエレガントな複雑な - しかし-waitsForを試してみてください? –

答えて

2

理論:結果を確認する前に、「サーバー」が要求に応答するのを待つ必要があります。応答を黙らせるだけでは不十分です。fetchは依然として非同期です。

誰でも@構文は何を意味するのかへのリンクを持っているhttps://github.com/pivotal/jasmine/wiki/Asynchronous-specs

+0

私はそれがそうだったが、 'wait(5000)'を追加すると(馬鹿げたものでも)助けにならない。しかし、ありがとう! – Blastula

+0

Hmm。私は[this fiddle](http://jsfiddle.net/buckdoyle/4H3Jv/1/)でそれを再現しようとしました。実装の詳細を共有できますか? –

+0

ありがとうバック!あなたのjsfiddleは私が少し辞めるのを助けました。私はそれをフォークして更新しました[ここ](http://jsfiddle.net/mCNcC/1/)。これは、ヘルパーから引き出された関数の完全な実装です。仕様が合格!私が考えることのできる唯一の違いは、Jasmine Headless Webkitを使用していることです。これは正しい方向への本当に良いプッシュです – Blastula

関連する問題