我想创建一个猫鼬存根save在特定模型的方法,让我创造我的模型的任何实例将调用存根而不是正常的猫鼬的save方法.我的理解是,这样做的唯一方法是将整个模型存根如下:
var stub = sinon.stub(myModel.prototype);
Run Code Online (Sandbox Code Playgroud)
不幸的是,这行代码导致我的测试抛出以下错误:
TypeError: Cannot read property 'states' of undefined
Run Code Online (Sandbox Code Playgroud)
有谁知道这里出了什么问题?
我正在尝试为我的Node应用程序的部分内容编写单元测试.我正在使用Mongoose作为我的ORM.
我搜索了一堆如何用Mongoose和Node进行测试但没有任何东西.解决方案/框架似乎都是全栈或没有提到嘲弄的东西.
有没有办法可以模拟我的Mongoose数据库,所以我可以在测试中返回静态数据?我宁愿不必设置测试数据库并用每个单元测试的数据填充它.
有人遇到过这种情况么?
我正在尝试使用Mongoose模型测试我用来保存小部件的服务功能.我想在我的模型上存根保存实例方法,但我无法找到一个好的解决方案.我见过其他建议,但似乎都没有完整.
这是我的模特......
// widget.js
var mongoose = require('mongoose');
var widgetSchema = mongoose.Schema({
title: {type: String, default: ''}
});
var Widget = mongoose.model('Widget', widgetSchema);
module.exports = Widget;
Run Code Online (Sandbox Code Playgroud)
这是我的服务......
// widgetservice.js
var Widget = require('./widget.js');
var createWidget = function(data, callback) {
var widget = new Widget(data);
widget.save(function(err, doc) {
callback(err, doc);
});
};
Run Code Online (Sandbox Code Playgroud)
我的服务很简单.它接受一些JSON数据,创建一个新的小部件,然后使用"save"实例方法保存小部件.然后它根据保存调用的结果回调传递错误和doc.
当我调用createWidget时,我只想测试它({title:'Widget A'})...
为了单独测试这个,我可能需要......
我无法弄清楚如何用Sinon做到这一点.我已经尝试过在SO页面上找到的几个变种而没有运气.
笔记:
感谢您的任何帮助,您可以提供.
我试图存根此对象中使用的mongoose依赖项:
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;
Run Code Online (Sandbox Code Playgroud)
使用这个问题的答案,我试过这样做:
mongoose = require 'mongoose'
sinon.stub mongoose.Model, 'save'
Run Code Online (Sandbox Code Playgroud)
但是我得到了错误:
TypeError:尝试将undefined属性保存为函数
我也试过这个:
sinon.stub PageSchema.prototype, 'save'
Run Code Online (Sandbox Code Playgroud)
然后我得到了错误:
TypeError:应该包装对象的属性
有人能帮忙吗?我究竟做错了什么?