gpt4 book ai didi

node.js - 使用 Sinon stub Mongoose 模型

转载 作者:搜寻专家 更新时间:2023-10-31 22:28:10 26 4
gpt4 key购买 nike

我正在尝试对这个对象中使用的 mongoose 依赖项进行 stub :

var Page = function(db) {

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

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

function save(params) {
var PageSchema = mongoose.model('Page');

var pageModel = new PageSchema({
...
});

pageModel.save();
}

Page.prototype.save = save;
}

module.exports = Page;

使用 this question 的答案,我试过这样做:

mongoose = require 'mongoose'
sinon.stub mongoose.Model, 'save'

但是我得到了错误:

TypeError: Attempted to wrapp undefined property save as function

我也试过这个:

sinon.stub PageSchema.prototype, 'save'

然后我得到了错误:

类型错误:应该包装对象的属性

有人可以帮忙吗?我做错了什么?

最佳答案

我分析了 mongoose 源代码,认为这是不可能的。保存功能未在模型上定义,而是由 hooks npm 动态生成的这使得 pre/post middleware功能。

但是,您可以像这样在实例上 stub 保存:

page = new Page();
sinon.stub(page, 'save', function(cb){ cb(null) })

更新:删除 pageModel

首先,您需要通过将 pageModel 设置为 Page 的自有属性 (this.pageModel = xxx) 来使其可访问。然后,您可以将其 stub ,如下所示:

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");
});

关于node.js - 使用 Sinon stub Mongoose 模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16727616/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com