gpt4 book ai didi

session - Sinatra + Rack::Test + Rspec2 - 使用 session ?

转载 作者:行者123 更新时间:2023-12-02 13:16:58 24 4
gpt4 key购买 nike

这是我第一次使用 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com