【问题标题】:Unit Testing Mongoose Model Callback with Sinon使用 Sinon 进行单元测试 Mongoose 模型回调
【发布时间】:2023-04-01 10:19:02
【问题描述】:

我的代码如下所示:

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 进行存根,因为它里面有一个 res.sort 和一个 .sort,后面有一个 .limit 。如果我使用存根,它会说 .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) 并且它给了我一个期望错误,说“意外的函数找到({ x:'abc'}, function (){}) 当预期的函数是 find({ x:'abc'}, function (){}[,...])"。有人知道函数 (){}[,...] 与函数 (){} 相比是什么意思吗?

感谢任何帮助。谢谢!

【问题讨论】:

    标签: javascript unit-testing mongoose mocking sinon


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2014-05-17
      • 1970-01-01
      • 2012-07-04
      • 2015-12-11
      • 2020-06-26
      • 1970-01-01
      • 2021-03-15
      • 1970-01-01
      相关资源
      最近更新 更多