如何测试使用会话的Sinatra应用程序?如何使用会话测试Sinatra应用程序
get "/", {}, {'rack.session' => { 'foo' => 'blah' } }
此代码不适用于我,我在我的应用程序中启用“会话”。
如何测试使用会话的Sinatra应用程序?如何使用会话测试Sinatra应用程序
get "/", {}, {'rack.session' => { 'foo' => 'blah' } }
此代码不适用于我,我在我的应用程序中启用“会话”。
像Philip建议的那样,在获取请求之前手动设置会话变量会更好。
session[:foo] = 'blah'
get "/"
`NameError:未定义的局部变量或方法'session'` – fguillen 2011-03-10 18:47:26
看起来问题实际上是激活了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]
刚刚遇到了这个问题,解决方案只是要求文件的顺序,所以@fguillen是正确的。在你规范的顶部,请确保您需要的机架/测试你的末日应用之前,所以在最低限度,这应该让你开始:
# 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
我终于想通了由猴子修补Rack::Test::Session
:
为什么不使用session [:foo] ='bla'?查看Sinatra文档 – Philip 2010-12-09 21:00:21
您是否曾经为此找到过解决方案?我陷入了同样的混乱状态,我尝试了以下的方法以及建议的解决方案。什么都没有 – Mika 2011-07-13 18:22:48