У меня есть код, который выглядит так:
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), и это дало мне ошибку ожидания, которая гласила: «неожиданная функция find({ x :'abc'}, function (){}), когда ожидаемой функцией является find({ x:'abc'}, function (){}[,...])". Кто-нибудь знает, что означает функция (){}[,...] по сравнению с функцией (){}?
Любая помощь приветствуется. Спасибо!