2017-10-12 5 views
-1

-je utiliser Backbone et ont la fonction suivante dans accountsView.js:Sinonjs: comment se moquer Backbone chercher

loadData: function() { 

      this.accountsCollection.fetch() 
       .done(_.bind(this.loadDefaultAccounts, this)) 
       .fail(_.bind(this._accountsLoadFailed, this)); 
     }, 

En test QUnit Je suis en train de se moquer de lui comme ceci:

sandbox.stub(Backbone.Collection.prototype, "fetch").yieldsTo("done", {}); 

mais obtenir l'erreur suivante lors essai en cours d'exécution:

« fetch devrait céder à « faire », mais aucun objet avec une telle propriété était passé. "

Ce que j'ai raté?

+0

la fonction '.fetch' accepte un objet' options' où vous pouvez passer un callback '' succès'' et 'erreur' avec' context' à utiliser. par exemple. '.fetch ({context: this, succès: this.loadDefaultAccounts})' –

Répondre

0

Ainsi, grâce à des conseils. Pour mon test fonctionne la fonction de l'avis devrait comme ceci:

loadData: function() { 

      this.accountsCollection.fetch({ 
       success: _.bind(this.loadDefaultAccounts, this), 
       error: _.bind(this._accountsLoadFailed, this), 
      });     
     }, 

Ou utiliser pour des tests de faux serveur comme suggéré @TJ.

1

yieldsTo ressemble à moi comme il est destiné à traiter le code basé sur le rappel.

Pour se moquer des requêtes AJAX, vous devez configurer un fake server et faire quelque chose comme

this.server.respondWith("GET", "/some/article/comments.json", 
     [200, { "Content-Type": "application/json" }, 
     '[{ "id": 12, "comment": "Hey there" }]']);