这是我第一次使用Sinatra,我无法让会话在我的测试中工作。我的应用程序中有enable :sessions。
我试过了:
get "/controller/something", {}, "rack.session" => {:session => "Aa"}或
get "/controller/something", {}, "session" => {:session => "Aa"}但是在我的请求中没有设置会话变量。我浏览了一下网页,尝试了几个建议,但似乎都不起作用。我是不是遗漏了什么?
谢谢!
发布于 2011-10-18 04:14:48
Rack不再支持通过请求传入会话(Rack >= v1.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发布于 2011-10-09 01:00:32
您需要使用将在env中结束的密钥
get "/controller/something", {}, "rack.session" => {:session => "Aa"}https://stackoverflow.com/questions/7695775
复制相似问题