所以我有一个路由,其中数据库调用位于单独的文件中
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