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

标签 session rspec sinatra rspec2 rack

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

相关文章:

php - Laravel 到基本 PHP 登录集成,工作!但无法设置 session

php - 多语言网页 : php + mysql + cookies

ruby - Rspec:如果最终引发异常,如何测试方法内容?

ruby - 使用 Sinatra 安排 rake 任务

ruby - 在 ruby​​ gem dasing.io - dashboard .erb files - sinatra 中使用变量

Windows IIS 中的 PHP session 警告

session - 为什么共享 session 来实现SSO不好?

ruby-on-rails - RSpec 测试 `rand` 内部 `rand`

ruby - 如何模拟 Ruby 模块函数?

javascript - ace 编辑器 - 将模式传递给表单输入