Итак, у меня есть маршрут с вызовом базы данных в отдельном файле:
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);
});
И я видел этот вопрос, и он совсем не помог: модульное тестирование экспресс-маршрута с асинхронным обратным вызовом