我已经分析了猫鼬的来源,并且认为这是不可能的。保存功能不是在模型上定义的,而是由钩子npm动态生成的,该钩子启用了前/后中间件功能。
但是,您可以像这样存根保存在实例上:
page = new Page();sinon.stub(page, 'save', function(cb){ cb(null) })更新:存根pageModel
首先,您需要
pageModel通过将其设置为
Page(
this.pageModel =xxx)自己的属性来使其可访问。然后,您可以像下面所示的那样存根:
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");});


