В рамках своего приложения rails я создал помощник под ApplicationHelper, который проверяет сгенерированные devise ошибки и добавляет их в хэш flash[:error].
def devise_flash
if controller.devise_controller? && resource && resource.errors.any?
# modify flash
end
end
Этот помощник вызывается на уровне представления (например, application.html.erb).
Однако я не могу провести модульное тестирование этого метода, потому что он полагается на экземпляр контроллера как на разрабатываемый контроллер. Я мог бы проверить это, проверив представление с помощью assert_select, которое использует помощник для отображения флэш-сообщений, но это кажется странным.
Это признак плохого дизайна? Что-то другое? Стоит ли искать способы отключить контроллер для модульного тестирования этой функции?
Хотя почему имеет значение, какое действие или ресурс контроллера? не должна ли какая-либо ошибка проверки модели показывать пользователю флэш-уведомление?
@lacostenycoder да, если он содержит ошибки разработки. Я действительно не уверен, правильно ли я тестирую это, это немного похоже на то, что, возможно, я тестирую внутренние компоненты, а не какой-то API, например, мне нужно либо разложить, либо выполнить тест контроллера / представления, а не модульный тест на Этот способ.
модульный тест должен проверять результат метода, а не его внутренние компоненты. Но зачем вообще вызывать этот метод из помощника, если он зависит от логики контроллера? Мы уже доверяем devise проводить проверки. Разве это не откуда ошибки? Смысл TDD в том, чтобы в любом случае избежать неправильного расположения логики.
Из-за того, как рельсы устанавливают вспышку, невозможно добавить ее перед рендерингом, поэтому необходимо вызвать ее на уровне представления. В этом случае похоже, что модульное тестирование просто не стоит.
Может посмотреть здесь stackoverflow.com/questions/4097932/…





Вы можете заглушить и протестировать вспомогательный метод, см. stackoverflow.com/questions/14402067/…