相关疑难解决方法(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万
查看次数

测试Mongoose Node.JS应用程序

我正在尝试为我的Node应用程序的部分内容编写单元测试.我正在使用Mongoose作为我的ORM.

我搜索了一堆如何用Mongoose和Node进行测试但没有任何东西.解决方案/框架似乎都是全栈或没有提到嘲弄的东西.

有没有办法可以模拟我的Mongoose数据库,所以我可以在测试中返回静态数据?我宁愿不必设置测试数据库并用每个单元测试的数据填充它.

有人遇到过这种情况么?

testing unit-testing mongoose node.js

15
推荐指数
3
解决办法
5850
查看次数

用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
查看次数

使用Sinon对Mongoose模型进行存根

我试图存根此对象中使用的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:应该包装对象的属性

有人能帮忙吗?我究竟做错了什么?

mongoose node.js sinon

6
推荐指数
2
解决办法
9743
查看次数

标签 统计

mongoose ×4

node.js ×4

sinon ×3

unit-testing ×2

javascript ×1

testing ×1