我有看起来像这样的代码:
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回调上使用常规回调。