Я хочу протестировать функцию saveRecords для сбоя , и перед этим мне нужно пройти аутентификацию и подключить MongoDB. Это код.
before(() => {
sinon.stub(Authentication, 'authenticate').returns(true);
sinon.stub(mongodb, 'connect').resolves("connected");
sinon.stub(models, 'saveRecords').throws(new Error("Error while saving record"));
});
it('Should error out if record is not inserted into the mongodb
collection', () => {
orderWebhook(req, res)
expect(res.result).to.contain("Error while saving record");
});
Вот код, который я тестирую.
exports.orderWebhook = async (req, res) => {
try {
const isAuthenticated = Authentication.authenticate(req);
if (isAuthenticated) {
await mongodb.connect();
await models.saveRecords(req.body");
res.status(200).send('Saved Successfully!');
} else {
res.status(403).send('Error! Auth failed!');
}
} catch (error) {
res.status(400).send(error.message);
}
}
Я предполагаю, что этот код заглушит аутентификацию, затем подключит MongoDB, а затем попытается вставить запись и выдать ошибку. Но он работает два раза , когда я отлаживаю с помощью отладчика VSCode.
- При первом возвращении true для функции authenticate и без разрешения подключения MongoDB и немедленного возврата.
- Во второй раз он запускает все три правильно и выдает ожидаемую ошибку.
При запуске теста в терминале происходит сбой . В чем может быть проблема?
Обновление: я заметил, что проблема связана с обещанием. Sinon обрабатывает запрос, и я использую await mongodb.connect (); , но он не работает должным образом, и если я удаляю await и возвращаю значение вместо обещания это работает.