我有看起来像这样的代码:

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来模拟模型本身,但是,由于遵循了sinon-mongoose文档,我遇到了exec不是函数的问题:

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


我添加了完成的回调,并在完成后的回调中添加了完成的回调到Expects('find')。withArgs({x:'abc'},done),它给了我一个期望错误,说“意外的功能find({x :'abc'},函数(){})时找到所需的函数({x:'abc'},函数(){} [,...])“。有人知道函数(){} [,...]与函数(){}相比意味着什么吗?

任何帮助表示赞赏。谢谢!

最佳答案

弄清楚问题是我传递了完成的回调,这不是正确的解决方法。实际问题涉及在exec回调上使用常规回调。

10-05 20:36
查看更多