javascript - 使用 Sinon 进行单元测试 Mongoose 模型回调

标签 javascript unit-testing mongoose mocking sinon

我的代码如下所示:

function dummy (options, callback) {
  MModel.find({x: options.y},
  function (err, res) {
    if (err) {
      return callback(err);
    }
    if (res) {
      callback(null, res.sort({timestamp : 1}));
    } else {
      callback(null, {});
    }
  }).sort({timestamp : -1}).limit(5);
}

我正在尝试对该函数进行单元测试,但是我无法对函数 MModel.find 进行 stub ,因为它内部有一个 res.sort ,外部有一个 .sort 后跟一个 .limit 。如果我使用 stub ,它会说 .sort 是一个属性,不能用作函数。我尝试的下一件事是使用 sinon-mongoose 模拟模型本身,但是,我遇到了 exec 不是函数的问题,因为我遵循 sinon-mongoose 文档:

sinon.mock(MongooseModel)
  .expects('find')
  .chain('limit').withArgs(10)
  .chain('sort').withArgs('-date')
  .chain('exec')
  .yields(null, 'SOME_VALUE');

我添加了done回调,并尝试将done回调添加到expects('find').withArgs({ x: 'abc' }, done),它给了我一个期望错误,说“意外的函数find” ({ x:'abc'}, function (){}) 当预期函数为 find({ x:'abc'}, function (){}[,...]) 时”。有谁知道 function (){}[,...] 与 function (){} 相比意味着什么?

感谢任何帮助。谢谢!

最佳答案

发现问题是我传递了完成回调,这不是正确的方法。实际问题是使用常规回调而不是 exec 回调来处理。

关于javascript - 使用 Sinon 进行单元测试 Mongoose 模型回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44188675/

相关文章:

javascript - 在所有页面上显示相同的内容(页眉、导航栏、侧边栏、页脚),无需服务器端脚本 (PHP)

unit-testing - 单元测试套件的好例子

oop - 与依赖项隔离的单元测试值对象

javascript - 无法返回值以响应 mongoose/mongodb 和 nodejs

javascript - Node js中的字符串正则表达式替换

javascript - 使用 JavaScript 执行排序

Python 2.7 单元测试 : Assert logger warning thrown

node.js - 如何在 Mongoose 中填充嵌套实体?

javascript - findOne 检索到的对象实例没有任何方法

javascript - 在对象之间创建监听器 javascript