机架不支持通过请求传递会话了(机架> = 1.0)。 Read this post for more detailed information on that.
在您的应用程序中设置会话变量的最佳方法是在您的应用程序中调用将设置会话变量的操作。举例来说,如果你有你的应用程序内部的路由设置会话变量是这样的:
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
不是我想听到的答案,但我想我没有别的选择,只能通过整个堆栈:(谢谢。 – Denny
是的,我听到你的。有点讨厌,但它不是很难,如果你做一个方法,你每次想要设置会话时都可以打电话,而且这样做的目的是使机架更加安全(因此人们无法截获会话并伪造未授权的会话),因此完成的目的是好的。 – Batkins
链接被打破。 –