使用 Rack::Test 使用 RSpec 测试会话变量

VUL*_*INE 3 ruby session rack rspec rack-test

给定代码

env "rack.session", {:var => 'value'}
Run Code Online (Sandbox Code Playgroud)

我可以在机架测试中设置会话变量。但是,我如何(使用机架测试)测试 RSpec 中的所述会话变量?假设一下,例如:

expect(env['rack.session'][:var]).to eq('value')
Run Code Online (Sandbox Code Playgroud)

我似乎找不到任何读取 Rack 环境变量的文档,只能写入它们。

小智 5

只需在最后一个请求上使用session 方法:

last_request.session
Run Code Online (Sandbox Code Playgroud)

这将为您提供会话哈希。一个样品:

it 'allows to access the session' do                                                                                                                                          
  get '/'                                                                                                                                                                     
  session = last_request.session                                                                                                                                              
  expect(session).to be_a Hash                                                                                                                                                
  expect(session[:var]).to eq 'value'                                                                                                                                         
end
Run Code Online (Sandbox Code Playgroud)

我已经使用rack v1.6.5和rack-test v0.6.3进行了测试,但它应该与rack版本2一起工作。