相关疑难解决方法(0)

用Sinon对Mongoose模型进行挖掘

我想创建一个猫鼬存根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)

有谁知道这里出了什么问题?

mongoose node.js sinon

20
推荐指数
3
解决办法
1万
查看次数

用Sinon保存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'})...

  • 使用传递给服务函数的数据调用Widget构造函数一次
  • 新创建的窗口小部件对象上的save实例方法被调用一次
  • EXTRA CREDIT:保存实例方法为错误调用null,为文档调用{title:'Widget A'}.

为了单独测试这个,我可能需要......

  • 模拟或存根Widget构造函数,以便它返回我作为测试的一部分创建的模拟小部件对象.
  • 存储模拟小部件对象的保存功能,以便我可以控制发生的事情.

我无法弄清楚如何用Sinon做到这一点.我已经尝试过在SO页面上找到的几个变种而没有运气.

笔记:

  • 我不想将已经构造的模型对象传递给服务,因为我希望服务是唯一"知道"mongoose的东西.
  • 我知道这不是最大的交易(只是通过更多的集成或端到端测试来测试它,但是找出解决方案会很好.

感谢您的任何帮助,您可以提供.

javascript unit-testing mongoose node.js sinon

10
推荐指数
1
解决办法
4519
查看次数

在模型上存储mongoose save方法

我想将saveMongoose模型可用的方法存根.这是一个示例模型:

/* model.js */
var mongoose = require('mongoose');
var userSchema = mongoose.Schema({
  username: {
    type: String,
    required: true
  }
});
var User = mongoose.model('User', userSchema);
module.exports = User;
Run Code Online (Sandbox Code Playgroud)

我有一些将调用该save方法的辅助函数.

/* utils.js */
var User = require('./model');
module.exports = function(req, res) {
  var username = req.body.username;
  var user = new User({ username: username });
  user.save(function(err) {
    if (err) return res.end();
    return res.sendStatus(201);
  });
};
Run Code Online (Sandbox Code Playgroud)

我想检查一下user.save使用单元测试在我的辅助函数中调用.

/* test.js */
var mongoose = require('mongoose');
var createUser = …
Run Code Online (Sandbox Code Playgroud)

unit-testing mocha.js mongoose

10
推荐指数
2
解决办法
3967
查看次数

标签 统计

mongoose ×3

node.js ×2

sinon ×2

unit-testing ×2

javascript ×1

mocha.js ×1