2010-12-09 34 views
3

如何測試使用會話的Sinatra應用程序?如何使用會話測試Sinatra應用程序

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

此代碼不適用於我,我在我的應用程序中啓用「會話」。

+1

爲什麼不使用session [:foo] ='bla'?查看Sinatra文檔 – Philip 2010-12-09 21:00:21

+2

您是否曾經爲此找到過解決方案?我陷入了同樣的混亂狀態,我嘗試了以下的方法以及建議的解決方案。什麼都沒有 – Mika 2011-07-13 18:22:48

回答

-1

像Philip建議的那樣,在獲取請求之前手動設置會話變量會更好。

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

`NameError:未定義的局部變量或方法'session'` – fguillen 2011-03-10 18:47:26

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] 
2

剛剛遇到了這個問題,解決方案只是要求文件的順序,所以@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 
相關問題