Стоит ли мне это проверять?
Да, на основе вашего примера обработчик содержит (как выглядит) некоторую критическую бизнес-логику.Он отвечает за оркестровку :
- удаление токена из запроса (безопасность)
- определение того, является ли запрос действительным (безопасность / аутентификация)
- определение доступности страницы для пользователя (безопасность / авторизация)
Если эта функция не была протестирована, будущий инженер может внести изменения в эту важную функцию, и они не будутполучать любые отзывы об их изменении.Предположим, что из-за человеческой ошибки они случайно удалили проверку isValidRequest?или удалил !
.Однако маловероятно, что риск, связанный с этим, может быть катастрофическим по сравнению с относительно небольшим усилием, необходимым для проверки этого.
Как я могу проверить функцию обработчика?
Следующий вопрос - как вы на самом деле тестируете это :) Я бы предпочел протестировать это на самом низком «уровне», возможном ниже (юнит тестирует этот метод, вызывая его напрямую против выше (собираетсячерез экспресс-фреймворк).
Как вы упомянули, существуют тесты для реализаций каждой из функций, делегируемых handler
, IMO важная вещь для проверки в handler
- это поток, а НЕреализации (так как они уже хорошо протестированы).
describe('handler()', () => {
it('removes token from query');
it('errors on invalid request');
it('returns 500 status code when page is inaccessible');
it('continues with .next() when request is valid and page is accessible');
})
Чтобы сделать это, я бы создал Example
и затем исправил методы, необходимые для создания правильного потока для ваших handler()
тестов.Таким образом, для теста недопустимого запроса это может выглядеть следующим образом:
const example = new Example();
sinon.stub(example, "isValidRequest").returns(false);
Если это не задано, чем эти тесты, по сути, дублируют tон другие тесты (путем тестирования фактической реализации).Использование заглушек позволяет реализовать реализацию isValidRequest
, в то же время имея защиту модульного теста в handler