node.js - Stub Mongoose 查找方法

标签 node.js unit-testing mocha.js sinon

我正在尝试 stub find 或 exec 函数来测试以下函数:

function getOpenTickets() {
    return Ticket.find({})
        .populate('assignees', ['fullName', 'firstName', 'email', 'notificationSettings.dailyEmail'])
        .populate('property', 'name')
        .populate('type', 'title')
        .populate({path: 'unit', model: 'Unit', select: 'title'})
        .sort('created')
        .lean()
        .exec();
}

我发现了几篇关于 stub Mongoose 方法的帖子,但没有一个对我有用,这是我所拥有的:

it('should test getOpenTickets', async() => {
    findStub = sinon.stub(Ticket, 'find');
    var result = await utils.__get__('getOpenTickets')();
    findStub.restore();
});

但我得到:

Cannot read property 'populate' of undefined

所以我尝试用假对象替换它:

var fakeFind = {
    args: {
        populate: [],
        sort: null,
        lean: null
    },
    populate: function (a) {
        this.args.populate.push(a)
    },
    sort: function (a) {
        this.args.sort = a;
    },
    lean: function () {
        this.args.lean = true
    },
    exec: function () {
        return Promise.resolve(this.args);
    }
}

还有

findStub = sinon.stub(Ticket, 'find').callsFake(fakeFind);

结果是:

TypeError: this.fakeFn.apply is not a function

我也尝试过对 mongoose.Model、prototype、exec 和其他一些东西进行 stub ,但没有成功。

有什么想法吗?

最佳答案

尝试使用 sinon-mongoose https://github.com/underscopeio/sinon-mongoose

这是一个例子:

require('sinon');
require('sinon-mongoose');

sinon.mock(Ticket)
  .expects('find')
  .chain('populate').withArgs(/* args */)
  .chain('sort').withArgs('create')
  .chain('lean')
  .chain('exec')
  .resolves('SOME_VALUE');

关于node.js - Stub Mongoose 查找方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47704304/

相关文章:

node.js - 204 错误代码然后 500 错误代码响应

node.js - 推送到 Heroku 时出错 : Cannot find module 'node-linux-x64/package.json'

Phpunit 找不到抽象类

node.js - 未能找到 package.json。 Node.js 启动时可能会出现问题。验证 package.json 是否有效或将代码放在名为 server.js 或 app.js 的文件中

node.js - 如何构建一个使用 React 构建的独立桌面应用程序,使用 Node 后端,并将前端和后端都 package 在 Electron 中作为桌面应用程序?

postgresql - 仅将 H2 数据库用于单元测试

cocoa - 为什么单元测试中的代码无法找到捆绑资源?

javascript - 如何在 NodeJS 中调用导出函数?哪些可以嵌套?

javascript - 安装 selenium-webdriver 以使用 NodeJS + Selenium + Mocha(在 Windows 上)的理想位置是什么

node.js - 有没有办法从 React UI 启动 Mocha 测试?