#ruby-on-rails #minitest #flash-message
#ruby-on-rails #minitest #flash-сообщение
Вопрос:
Я пишу интеграционный тест для контроллера, который отображает страницу и удаляет flash[:danger]
сообщение, если действие обновления не выполняется по X причине.
Это тест, который я придумал:
test "#update should render correct page if not successful" do
subscription_cart = subscription_carts(:active_one)
subscription_cart.stubs(:update).returns(false)
assert_equal flash[:danger], 'Something went wrong!'
end
Я пытаюсь протестировать это флэш-сообщение, но независимо от того, как я пишу эту последнюю строку, я получаю ошибку:
Minitest::UnexpectedError:
NoMethodError: undefined method `flash' for nil:NilClass
Я также пробовал использовать разные синтаксисы assert:
assert flash[:danger], 'Something went wrong!'
assert_equal 'Something went wrong!', flash[:danger]
Каков правильный способ?
Комментарии:
1. вам нужно вызвать действие контроллера, прежде чем вы сможете протестировать flash.
put some_path(some_model), params: { p1: "a value" }
2. Я немного разочарован тем, что это встроено в контроллеры, и вы не можете протестировать их отдельно. Я создаю компонент представления flash, который принимает flash в качестве аргумента и выполняет различные действия на основе его свойств. Действительно расстраивает, что вы не можете просто создать экземпляр проклятого flash-сообщения!