这是我第一次使用 Sinatra,但我无法让 session 在我的测试中发挥作用。我在我的应用程序中启用:sessions
。
我尝试过:
get "/controller/something", {}, "rack.session" => {:session => "Aa"}
或
get "/controller/something", {}, "session" => {:session => "Aa"}
但是我的请求中没有设置 session 变量。我浏览了网络并尝试了一些建议,但似乎没有任何效果。我错过了什么吗?
谢谢!
最佳答案
Rack 不再支持通过请求传入 session (Rack >= v1.0)。 Read this post for more detailed information on that.
在应用程序中设置 session 变量的最佳方法是在应用程序内部调用将设置 session 变量的操作。例如,如果您的应用程序内有一个设置 session 变量的路由,如下所示:
post '/set_sess_var/:id'
session[:user_id] = params[:id]
end
假设您实际上想测试另一条路由,它使用如下 session 变量:
get '/get_user_attributes'
User.find(session[:user_id]).attributes
end
然后在您的测试中,您应该首先调用设置 session 的路由,然后转到使用它的另一个路由。这是 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
关于session - Sinatra + Rack::Test + Rspec2 - 使用 session ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7695775/