Rack больше не поддерживает передачу сеансов через запрос (Rack> = v1.0). Прочтите этот пост для получения более подробной информации об этом.
Лучший способ установить переменную сеанса в вашем приложении - вызвать внутри приложения действие, которое установит переменную сеанса. Например, если у вас есть маршрут внутри приложения, который устанавливает переменную сеанса следующим образом:
post '/set_sess_var/:id'
session[:user_id] = params[:id]
end
Давайте представим, что есть еще один маршрут, который вы на самом деле хотели проверить, который использует переменную сеанса, например:
get '/get_user_attributes'
User.find(session[:user_id]).attributes
end
Затем в ваших тестах вы должны сначала вызвать маршрут, который устанавливает сеанс, а затем перейти на другой маршрут, который его использует. Вот нотация rspec, так как это то, что я использую для тестирования:
it "should print out user attributes" do
user_id = 1
post '/set_sess_var/' + user_id
get '/get_user_attributes'
last_response.body.should == User.find(user_id).attributes
end
Если вы собираетесь часто использовать маршрут в своих тестах, то вы можете написать метод для выполнения этого в своем тестовом файле (если вы используете Rspec, тогда этот метод может идти в вашем spec_helper.rb или в ваш файл controller_spec.rb):
def set_session_var(user_id)
post '/set_sess_var/' + user_id
end
и затем вызывайте его в своих тестах, когда вам нужно было установить:
it "should print out user attributes" do
set_session_var(1)
get '/get_user_attributes'
last_response.body.should == User.find(1).attributes
end