如何測試使用會話的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