2012-07-31 32 views
0

試圖使用會話,但得到奇怪的結果。與Rspec和水豚的多次會議?

以下RSpec的代碼似乎會產生2個獨立的會話:

visit start_path 
post session_path, { foo: "bar" } 

在該方法中由start_path控制器稱爲:

會話[:開始] = '是' 提出「開始: #{session.inspect}」

在會話控制器:

def create 
    session[:foo] = params[:foo] 
    head :created 
    puts "Sessions controller: #{session.inspect}" 
end 

輸出看起來像:

Start: {"session_id"=>"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" ... 
Sessions controller: {"session_id"=>"yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy" ... 

會話ID是不同的。

這是因爲RSpec創建2個會話,後調用創建一個單獨的會話,或者我的應用程序正在做一些事情來分隔會話?

爲什麼會有2個會話被創建?

試圖將create更改爲其他名稱,但這沒有什麼區別。

使用cookie存儲。

+0

您使用的是rails/rspec/capybara的哪個版本? – shigeya 2012-07-31 03:10:55

+0

另外,您正在使用哪個驅動程序? (我使用capybara-webkit獲得巨大成功) – shigeya 2012-07-31 03:18:50

+0

Rails 3.2.2/Capybara 1.1.2/Rspec 2.11.0和內置的Capybara驅動程序。 – 2012-07-31 11:10:38

回答

0

由於堆棧溢出,在這裏找到了解決辦法:Rails - Losing session with Integration Tests and Capybara - CSRF related?

的問題是,水豚有它自己的會話。

需要使用page.driver.post而不是post

+0

我已驗證,並且我沒有使用帖子,而是使用'click_button'提交行動。從測試的角度來看,填寫表格和提交可能是更好的選擇。 – shigeya 2012-07-31 22:34:14

+1

是的,填寫表單點擊提交更好。對於這種情況,我嘲笑AJAX調用,所以沒有表單或提交。 – 2012-07-31 22:36:19