Как поместить значение во flash при тестировании действия - PullRequest
10 голосов
/ 17 октября 2011

Я пытаюсь проверить действие, для которого требуется значение, сохраненное во флэш-памяти.

def my_action
  if flash[:something].nil?
    redirect_to root_path if flash[:something]
    return
  end

  # Do some other stuff
end

В моем тесте я делаю что-то вроде:

before(:each) do
  flash[:something] = "bob"
end

it "should do whatever I had commented out above" do
  get :my_action
  # Assert something
end

Проблема, с которой я сталкиваюсь, заключается в том, что flash не имеет значений внутри my_action. Я предполагаю, что это потому, что на самом деле никакого запроса не происходит.

Есть ли способ настроить вспышку для такого теста?

Ответы [ 3 ]

11 голосов
/ 19 октября 2012

Я должен был решить проблему с simialr;У меня было действие контроллера, которое перенаправлялось на один из двух путей по завершении в зависимости от значения хеш-записи.Спектральный тест, который я нашел работающим, для вашего примера выше:

it "should do whatever I had commented out above" do
  get :my_action, action_params_hash, @current_session, {:something=>true}
  # Assert something
end

@ current_session - это хеш с определенным сеансом stuf;Я использую authlogic.Об использовании четвертого аргумента get для flash я узнал в [Руководство по тестированию Rails-приложений [1] ).Я обнаружил, что тот же подход также работает для удаления;и я полагаю, все остальные.

7 голосов
/ 14 января 2015

у меня с RoR 4.1 работает следующее:

flash_hash = ActionDispatch::Flash::FlashHash.new
flash_hash[:error] = 'an error'
session['flash'] = flash_hash.to_session_value

get :my_action
1 голос
/ 17 октября 2011

Проблема в том, что использование флэш-хэша так, как вы делаете, означает, что он становится доступным только для следующего запроса.Чтобы установить для флэш-хэша значение для вашего теста, вы можете написать что-то вроде этого:

def test_something_keeps_flash
  @request.flash[:something] = 'bar'
  xhr :get, :my_action
  assert_response :success
  // Assert page contents here
end

Это гарантирует, что вы сможете проверить логику своих действий.Поскольку теперь он правильно установит флэш-хэш, введите my_action и выполните проверку флэш-хэша.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...