Как получить доступ к сеансу из теста интеграции Rails?
Рассмотрим следующий тест интеграции:
test "if there is no user in session, redirect to index and flash message" do
open_session do |sess|
post '/login', :email => users(:client).email, :password => 'rumpelstiltskin'
sess[:user] = nil
get '/user_page'
assert_redirected_to index_path
assert_equal "Your session has expired. Please log in again", flash[:notice]
end
end
Это порождает ошибку: undefined method '[]='
И, изменив значение на sess.session[:user] = nil
, также возникает ошибка: NoMethodError: undefined method 'session' for nil:NilClass
Как вы изменяете параметры сеанса из теста интеграции в Rails?
Работа в Rails 3.0.7, Ruby 1.9.2p180, Unit test.
EDIT:
get '/user_page', nil, {:user => nil}
и get ('/user_page', nil, {:user => nil} )
генерируют ошибки.
Ответы
Ответ 1
В Rails 3.2.3 для меня работает следующее:
# Hit the root_path to start our session
get root_path
# A helper method to set our session
login_as(@user_fixture)
# Now we can access the session variable
assert session[:user_id]
Не уверен, что это сработает для вас, так хорошо!
Ответ 2
Просто используйте session[:user]
без open_session
block
Ответ 3
Оказывается, что это не представляется возможным.
Ответ 4
Это не то, для чего предназначены интеграционные тесты. Вы не должны изменять сеанс напрямую, вместо этого вы должны нажать свой путь/logout.