Как протестировать код try catch в javascript с использованием jest и включить вызов next() с промежуточным программным обеспечением в express?

#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 хорошо документирован, и вы должны заставить его работать без взломов.