如何在不更改路由的情况下对异步数据库调用进行单元测试?

时间:2018-11-16 18:11:43

标签: node.js unit-testing routes mocha

所以我有一个路由,其中​​数据库调用位于单独的文件中

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);
});

我已经看到了这个问题,但根本没有帮助:unit testing express route with async callback

0 个答案:

没有答案