Модульное тестирование функций контроллера в Nodejs с использованием Mocha и Chai - PullRequest
0 голосов
/ 28 января 2019

У меня в контроллере есть функция, которая принимает 2 аргумента: запрос и ответ.

function convertTime (req, res) {
   callOtherFunction().then(function(result){
       res.status(200).send(result);
    }
}

Моя функция модульного тестирования для проверки этой функции выглядит примерно так.

describe('Testing my function ', function() {
  var req = {
      query: {}
     };

 var res = {
     sendCalledWith: '',
     send: function(arg) { 
              this.sendCalledWith = arg;
            },
    json: function(err){
            console.log("\n : " + err);
            },
     status: function(s) {this.statusCode = s; return this;}
   };

  it('Should error out if no inputTime was provided', function() {
    convertTime(req,res);
    expect(res.statusCode).to.equal(500)
  });

});

когда я запускаю тестирование модуля, он не ждет разрешения моего ответа.Поскольку у меня нет функции обратного вызова для ожидания, как сделать тест для ожидания обновления объекта res?

1 Ответ

0 голосов
/ 28 января 2019

Лучше возвращать обещания от функций, которые их используют.Это естественно делается в async функциях.Даже если это не нужно в производстве, это улучшает тестируемость.

function convertTime (req, res) {
   return callOtherFunction().then(function(result){
       res.status(200).send(result);
    }

Тогда обещание может быть приковано:

  it('Should error out if no inputTime was provided', async function() {
    await convertTime(req,res);
    expect(res.statusCode).to.equal(500)
  });
...