2012-05-09 1 views
1

Lorsque j'exécute cette sortie de spécification, j'obtiens "attendu 0 à 2". 2 est la longueur correcte des objets du modèle dans mon appareil, donc fakeServer de Sinon répond correctement avec la réponse mockée. Je ne peux pas comprendre pourquoi ma collection a zéro objet après fetch alors. Toute aide sera grandement appréciée!La collecte du backbone ne se remplit pas dans Jasmine + Sinon spec

Pour votre information: cela vient de suivre le long du Backbone Sinon + tutoriel Jasmine ici: 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 

Modèle:

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

EDIT:

Buck Doyle ci-dessous m'a aidé à voir qu'il n'y a pas de problème de spécification. J'ai une sorte de problème avec ma config Jasmine Headless Webkit, et si les spécifications sont exécutées avec Jasmine autonome, ils passent.

+0

quelqu'un a un lien vers ce que les moyens de syntaxe @? –

Répondre

2

Théorie: vous devez attendre que le "serveur" réponde à la requête avant de vérifier le résultat. Se moquer de la réponse ne suffit pas: le fetch est toujours asynchrone.

Essayez un waits ou plus complexe, mais élégante-waitsFor comme décrit à https://github.com/pivotal/jasmine/wiki/Asynchronous-specs

+0

Je souhaite qu'il en soit ainsi, mais ajouter 'waits (5000)' (même absurde) n'aide pas. Merci quand même! – Blastula

+0

Hmm. J'ai essayé de le reproduire dans [ce violon] (http://jsfiddle.net/buckdoyle/4H3Jv/1/) et ça marche pour moi. Pouvez-vous partager plus de votre implémentation? –

+0

Merci Buck !! Votre jsfiddle m'a aidé à quitter un peu. Je l'ai fourchu et mis à jour [ici] (http://jsfiddle.net/mCNcC/1/). Ceci est ma mise en œuvre complète comprennent des fonctions tirées des aides. Les spécifications passent! La seule différence que je peux penser est que j'utilise Jasmine Headless Webkit. C'est une très bonne poussée dans la bonne direction – Blastula

Questions connexes