Модульное тестирование обратного вызова модели Mongoose с 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, потому что в ней есть 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 (){}[,...])". Кто-нибудь знает, что означает функция (){}[,...] по сравнению с функцией (){}?

Любая помощь приветствуется. Спасибо!


person Samar Sajnani    schedule 25.05.2017    source источник


Ответы (1)


Выяснилось, что проблема заключалась в том, что я передал обратный вызов done, что было неправильным способом. Фактическая проблема связана с использованием обычных обратных вызовов вместо обратных вызовов exec.

person Samar Sajnani    schedule 26.05.2017