Вот тестируемый код:
function timeout(): Promise<NodeJS.Timeout> {
return new Promise(resolve => setTimeout(resolve, 0));
}
async function router(publish: Publish): Promise<void> => {
await timeout();
publish('requestObject');
};
Вот мой тест. Если я воспользуюсь попыткой / уловкой ниже, она сразу же завершится с ошибкой.
it.only('returns a valid response', (done) => {
const publish = sinon.stub();
publish.callsFake((publishResponse) => {
try {
expect(publishResponse).to.equal('wrong');
done();
} catch (error) {
done(error);
}
});
router(publish);
sinon.restore();
});
Если я удаляю время проверки / перехвата теста с:
publish.callsFake((publishResponse) => {
expect(publishResponse).to.equal('wrong');
done();
});
Ошибка: превышено время ожидания 5000 мс. Для асинхронных тестов и хуков, убедитесь, что
"done ()" называется; если вы возвращаете обещание, убедитесь, что оно разрешено.
Полагаю, обещание не разрешается, потому что ожидание не выполняется. И поэтому он не попадает в готово (). Есть ли способ для меня, чтобы переписать это более аккуратно? Или используете try / catch для написания этого теста?
Я прочитал несколько ответов SO с похожим вопросом, и они говорят, чтобы проверяемый код не глотал ошибки. Но в моем коде я не вижу кода, поглощающего ошибку.