2017-06-08 89 views
0

Rails的版本:5.1.1,4.2.7從集成測試會話不加載會話Cookie

升級我有一個集成測試,擊中一個URL(從ActionDispatch :: IntegrationTest inherting)。該URL中的控制器會將一些內容放入會話中。測試然後試圖斷言某些值現在出現在會話中。

我session_store.rb:

Rails.application.config.session_store :cookie_store, key: '_companySite_session', expire_after: 1.year 

什麼我發現是,會話變量,從集成測試爲「會話」叫,始終是一個空哈希({})。

如果我在測試中查看request.host,我會看到「www.example.com」。如果我看response.cookies或餅乾,我看到:

#<Rack::Test::Cookie:0x00000006037108 
@default_host="www.example.com", 
@name="_companySite_session", 
@name_value_raw= 
"_companySite_session=a3RnYjRvWDlUYzRZaVlaTnlsK2RkeXBWcWFNYnQ1RVo4azNqdXNOanVWWWZVT2o5Vk0wTkVhY1dFOTBxdWNzMU5sY3c1cXhXRm0xT3JZWWZGUnluSnRuYTVoaWQ1S3ZZRXVMa1YyQ2pUMjEvOExaWkcybTdGT3lUZnZ0STRSSGVpc0dPU1VONWNwTEZxQlRvODN3eXdKZTYreVIvNDR4Y0IxMms2djlPWUZCcktYWmo1SElSZ0ttaHA5UWk5MDA5aVJzaGt3cUJ4V2tFY295ZGo4ak8ydUI3OWRnTUdkcmRpanVML3phalJtZ2c1OXByeExiRDhlcy9rR1RYUGh6NlkxV2xqNWl2VjlCMm45WXo0ajBKN0VTQ29CVGRQRVErOVIrNFZwdEZBc01oL2RaSGltUjdleGlWN3YySTdJUzcvbVlJbWdwWVNUVkw4K1pPc3JsUWxOR1BZNFVrUXFtYVVObmNlYlZrSklEbk5aU3VTck5MNm12a0NBMVF2aG5xLS1pSEJTVTVLZzJ2ZVA2M1IzTmJ4Njh3PT0%3D--f253c4e1678e53896a247b087e741cf006c5874f", 
@options={"path"=>"/", "expires"=>"Fri, 08 Jun 2018 19:46:22 -0000", "HttpOnly"=>nil, "domain"=>"www.example.com"}, 
@value= 
"a3RnYjRvWDlUYzRZaVlaTnlsK2RkeXBWcWFNYnQ1RVo4azNqdXNOanVWWWZVT2o5Vk0wTkVhY1dFOTBxdWNzMU5sY3c1cXhXRm0xT3JZWWZGUnluSnRuYTVoaWQ1S3ZZRXVMa1YyQ2pUMjEvOExaWkcybTdGT3lUZnZ0STRSSGVpc0dPU1VONWNwTEZxQlRvODN3eXdKZTYreVIvNDR4Y0IxMms2djlPWUZCcktYWmo1SElSZ0ttaHA5UWk5MDA5aVJzaGt3cUJ4V2tFY295ZGo4ak8ydUI3OWRnTUdkcmRpanVML3phalJtZ2c1OXByeExiRDhlcy9rR1RYUGh6NlkxV2xqNWl2VjlCMm45WXo0ajBKN0VTQ29CVGRQRVErOVIrNFZwdEZBc01oL2RaSGltUjdleGlWN3YySTdJUzcvbVlJbWdwWVNUVkw4K1pPc3JsUWxOR1BZNFVrUXFtYVVObmNlYlZrSklEbk5aU3VTck5MNm12a0NBMVF2aG5xLS1pSEJTVTVLZzJ2ZVA2M1IzTmJ4Njh3PT0=--f253c4e1678e53896a247b087e741cf006c5874f"> 

換句話說,會話cookie似乎是存在,並且其領域似乎符合要求的主機。我也使用How to decrypt a Rails 5 session cookie manually?的代碼打印出此cookie的值,並且該值是正確的。

我的測試環境的config指定config.action_controller.allow_forgery_protection =假

在這一點上,我的想法。該cookie在那裏,看起來很好,它設置爲請求的域,它沒有過期,但會話仍然是一個空的哈希。莫名其妙地沒有得到更新?它試圖更新但是失敗了嗎?我已經用盡了一切。

該測試在Rails 4.2.7下正常工作。

雖然我沒有深入瞭解它,但我也一直在發現測試的flash變量似乎總是空的。同樣,在Rails 4中正常運行的測試正在破裂,因爲閃光似乎總是空的。我認爲閃光和會議是相關的,所以也許同樣的問題影響他們兩個。

回答

0

的解決方案是我們在test.rb環境文件有此設置:

config.allow_concurrency = false 

出於某種原因,使得在測試的請求後,該設置將導致會話用空代替哈希值。 Rails的文檔建議您不要直接設置此標誌:http://guides.rubyonrails.org/v3.2/configuring.html

我想這是我們已經在軌道2集,然後得到了攜帶到Rails 4,當我們升級了,現在打破了Rails的5

我已經登錄其作爲Rails的回購問題: https://github.com/rails/rails/issues/29608