6
votes

Écoulement d'un modèle de mangouste à l'aide de sinon

J'essaie de mettre fin à la dépendance de la mangouste utilisée dans cet objet: xxx

à l'aide de la réponse pour Cette question , j'ai essayé de faire cela: xxx

mais j'ai eu l'erreur:

TypeError: Tentative d'envelopper la propriété non définie Enregistrer en tant que fonction

J'ai également essayé ceci: xxx

et je obtenu l'erreur:

TypeError: devrait envelopper la propriété de l'objet

Quelqu'un peut-il aider avec cela? Qu'est-ce que je fais mal?


1 commentaires

J'ai le même problème..


3 Réponses :


7
votes

J'ai analysé la source de mangouste et je ne pense pas que cela soit possible. La fonction de sauvegarde n'est pas définie sur le modèle, mais générée dynamiquement par hameçonne le NPM qui permet Middleware Middleware
fonctionnalité.

Toutefois, vous pouvez enregistrer en instance comme ceci: P>

mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/test');
mongoose.set('debug', true);

schema = new mongoose.Schema({title: String});
mongoose.model('Page', schema);


var Page = function(db) {

  var mongoose = db || require('mongoose');

  if(!this instanceof Page) {
    return new Page(db);
  }

  var PageSchema = mongoose.model('Page');
  this.pageModel = new PageSchema();

  function save(params, cb) {
    console.log("page.save");
    this.pageModel.set(params);
    this.pageModel.save(function (err, product) {
      console.log("pageModel.save");
      cb(err, product);
    });
  }

  Page.prototype.save = save;
};


page = new Page();

sinon = require('sinon');
sinon.stub(page.pageModel, 'save', function(cb){
  cb("fake error", null);
});

page.save({ title: 'awesome' }, function (err, product) {
  if(err) return console.log("ERROR:", err);
  console.log("DONE");
});


4 commentaires

J'ai essayé de faire cela, mais je reçois une erreur disant que: l'objet Enregistrer n'a pas de méthode 'Save'. J'ai appelé mongoose.model ('Page'), créé et instantané de cela, puis je l'empêche.


Hmm .. Essayez-vous de sculpter le pagemodel.save ?


Tout ce que je veux, c'est éviter d'aller à la base de données. Peu importe comment. D'abord j'ai essayé de supporter de mongoose.model. Maintenant j'essaie de supporter pagemodel.save


Je n'aime vraiment pas exposer les pageschema, mais cette façon fonctionne.



6
votes

Je vous recommande d'utiliser Mock code> au lieu de Stub code>, qui vérifiera que la méthode existe vraiment sur l'objet d'origine.

var page = new Page();

// If you are using callbacks, use yields so your callback will be called
sinon.mock(page)
  .expects('save')
  .yields(someError, someResult);

// If you are using Promises, use 'resolves' (using sinon-as-promised npm) 
sinon.mock(page)
  .expects('save')
  .resolves(someResult);


2 commentaires

En espérant que je me souvienne de donner à cela un vote demain. Quel paquet moqueur génial. M'a sauvé beaucoup de douleur.


Merci@rududverhoef :)



0
votes
sinon.stub(page, 'save').callsFake(function(cb){
      // do your Fake code
      cb(null)
})

0 commentaires