Как вы тестируете flash [: danger] и другие flash-сообщения в Rails?

#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-сообщения!