#express #unit-testing #jestjs #try-catch
#node.js #экспресс #модульное тестирование #try-catch #sinon
Вопрос:
Я создаю API и хочу знать, как протестировать блок try catch. Я хочу убедиться, что ошибка, перехваченная блоком, передает throw next() в express следующему промежуточному программному обеспечению.
Вот пример, это мой обратный вызов метода POST:
function create (req, res, next) {
try {
const data = {}
response(req, res, data, 201)
} catch (error) {
next(error)
}
}
Я хочу проверить, что вызывается next . Я планирую использовать sinon для этого, но я хочу смоделировать ошибку и убедиться, что ошибка обнаружена.
Это экран моего охвата в jest.
Комментарии:
1. Заглушите
response
функцию и заставьте ее выдать ошибку.
Ответ №1:
Если бы было слишком много усилий для воспроизведения фактической ошибки, я бы просто не стал описывать это утверждение.
Благодаря макетным функциям Jest можно шпионить за функциями, методами и модулями и временно заменять их реализацию и возвращаемое значение.
https://jestjs.io/docs/mock-function-api
Это было бы что-то вроде
// replace the implementation for your stub
const spy = jest.spyOn(response).mockImplementation(() => { throw new Error(); });
...
expect(spy).toHaveBeenCalled();
spy.mockRestore(); // restore the implementation
Имейте в виду, что этот синтаксис работает для функций. Если это метод из класса, то так и будет jest.spyOn(YourClass.prototype, 'methodNameInsideQuotes')
. Jest хорошо документирован, и вы должны заставить его работать без взломов.