Как я могу протестировать асинхронные вызовы базы данных без изменения маршрута? - PullRequest
0 голосов
/ 16 ноября 2018

Итак, у меня есть маршрут с вызовом базы данных в отдельном файле:

module.exports = (req, res) => {
  const sql = `SELECT Topic FROM surveys WHERE ID="${req.params.id}"`;
  model.connection.query(sql, (err, result) => {
    if (err) res.status(500).send(err);
    res.send(result);
  });
};

В моем тестовом файле я создаю поддельные объекты req и res для проверки различных входных данных:

const req = {
  body: {},
  params: {
  id: '',
  }
};

const res = {
  message: '',
  stat: 200,
  send(arg) {
     this.message = arg;
  },
  status(number) {
     this.stat = number;
     return this;
  }
};

И называйте это в каждом тесте:

 it('Should return status 200 if parameter is a number string', () => {
   req.params.id = '1';
   getTopic(req, res);
   chai.expect(res.stat).to.equal(200);
 });

Мой вопрос: как я могу проверить его асинхронно, без влияния на мой маршрут ? Я видел документацию Mocha, объясняющую это, но они требуют обратного вызова в функции.

it('Should return status 200 if parameter is a number string', (done) => {
   req.params.id = '1';
   getTopic(req, res); // Cannot give any callback
   chai.expect(res.stat).to.equal(200);
   done(); //Doesn't work
});

Я также пытался использовать async/await, но это не сработало (мне не хватает знаний, как его использовать, может быть, поэтому)

it('Should return status 200 if parameter is a number string', async () => {
   req.params.id = '1';
   await getTopic(req, res);
   chai.expect(res.stat).to.equal(200);
});

И я видел этот вопрос, и он совсем не помог: модульное тестирование экспресс-маршрута с асинхронным обратным вызовом

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...