Я пытаюсь протестировать асинхронную функцию с помощью Jest и не могу пройти тест.
Мой код
export class UnexpectedRequestError {
constructor(public message: string = 'Unauthorized') {
this.message = message;
}
}
export const foo = async (arg: boolean) => {
if (arg) {
return true;
} else {
const message = 'message';
await sendSlackMessage(message);
throw new UnexpectedRequestError(message);
}
};
Тестовый код
test('throws UnexpectedRequestError', async () => {
await expect(foo(false)).rejects.toThrow(UnexpectedRequestError);
});
Мой тест возвращает:
expect(received).rejects.toThrow(expected)
Expected constructor: UnexpectedRequestError
Received function did not throw
Я искал другие подобные вопросы здесь, в StackOverFlow, но не нашел ничего плохого в своих кодах. Любые идеи, что я делаю неправильно?
Спасибо за ваш комментарий. await expect(() => foo(false)).rejects.toThrow(UnexpectedRequestError) дал мне тот же результат, что и Received function did not throw.
Убедитесь, что ваша функция будет вызываться с реальной логикой в вашем тесте.
@hoangdv Я пытался поставить console.info('abc') прямо перед throw new UnexpectedRequestError(message), и abc отображается, когда я запускаю тест. Это то, что вы имеете в виду?
Да, кажется, что-то пошло не так. Попробуем вызвать await foo(); перед строкой утверждения.
@hoangdv stackoverflow.com/a/73739678/10421404 Это было так, но все равно спасибо!





Вашему классу ошибок требуется наследование "Error".
export class UnexpectedRequestError extends Error {
constructor(public message: string = 'Unauthorized') {
super(message);
}
}
Попробуйте
except(() => foo(false)).