2012-05-09 2 views
1

Когда я запускаю этот выход спецификации, я получаю «Ожидаемый 0 равным 2.» 2 - это правильная длина объектов модели в моем приборе, поэтому FakeServer Sinon правильно реагирует на насмешливый ответ. Я не могу понять, почему моя коллекция имеет нулевые объекты после выборки. Любая помощь могла бы быть полезна!Массивная коллекция fetch не заполняется в Jasmine + Sinon spec

FYI: это исходит из следующих по Backbone Sinon + жасмин учебник здесь: http://tinnedfruit.com/2011/03/25/testing-backbone-apps-with-jasmine-sinon-2.html

Spec:

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:

Buck Дойль внизу помог мне понять, что проблемы с spec нет. У меня есть какая-то проблема с моей конфигурацией Jasmine Headless Webkit, и если спецификации работают с автономным Jasmine, они проходят.

+0

кого есть ссылка на то, что синтаксических средств @? –

ответ

2

Теория: вам нужно подождать, пока «сервер» ответит на запрос, прежде чем проверять результат. Отказов от ответа недостаточно: fetch по-прежнему асинхронен.

Попробуйте waits или более сложный, но-элегантный waitsFor, как описано в https://github.com/pivotal/jasmine/wiki/Asynchronous-specs

+0

Я бы хотел, чтобы это было так, но добавление 'waits (5000)' (нелепое даже) не помогает. Спасибо хоть! – Blastula

+0

Хм. Я попытался воспроизвести его в [этой скрипке] (http://jsfiddle.net/buckdoyle/4H3Jv/1/), и он работает для меня. Можете ли вы поделиться большей частью своей реализации? –

+0

Спасибо, Бак! Ваш jsfiddle помог мне немного уйти. Я разветвил его и обновил его [здесь] (http://jsfiddle.net/mCNcC/1/). Это моя полная реализация включает в себя функции, вытащенные из помощников. Спецификации проходят! Единственное различие, о котором я могу думать, это то, что я использую Jasmine Headless Webkit. Это действительно хороший толчок в правильном направлении – Blastula