如何使用session测试Sinatra应用程序

时间:2010-12-09 20:28:54

标签: testing session sinatra rack

如何测试使用会话的Sinatra应用程序?

get "/", {}, {'rack.session' =>  { 'foo' => 'blah' } }

此代码对我不起作用,我在我的应用中启用了“会话”。

4 个答案:

答案 0 :(得分:4)

看起来问题实际上是enable :sessions被激活了。

您必须停用此设置才能覆盖会话

解决方案可能是:

# my_test.rb (first line, or at least before you require your 'my_app.rb')
ENV['RACK_ENV'] = 'test'

# my_app.rb (your sinatra application)
enable :sessions  unless test?

# my_test.rb (in your test block)
get '/', {}, 'rack.session' => { :key => 'value' }

另一方面,为了能够检查任何会话更改操作应该执行的操作,我们可以不发送哈希 rack.session ,但是指向哈希指针,以便我们可以在操作调用后检查哈希改变:

# my_test.rb (in your test block)
session = {}
get '/', {}, 'rack.session' => session
assert_equal 'value', session[:key]

答案 1 :(得分:2)

刚遇到这个问题,解决方案只是需要文件的顺序,所以@fguillen是正确的。在你的规范的顶部,确保你的sinatra应用程序之前需要机架/测试,所以至少,这应该让你开始:

# in myapp_spec.rb
require 'rspec'
require 'rack/test'
require 'myapp'

it "should set the session params" do
  get 'users/current/projects', {}, 'rack.session' => {:user =>'1234'}
end

# in myapp.rb

enable :sessions

get 'users/current/projects' do
  p env['rack.session']
end

答案 2 :(得分:-1)

就像Philip建议的那样,在get请求之前手动设置会话变量会更好。

session[:foo] = 'blah'
get "/"

答案 3 :(得分:-1)

我终于通过猴子修补Rack::Test::Session找出了它:

https://gist.github.com/troelskn/5047135