【发布时间】:2017-11-10 16:34:14
【问题描述】:
Rails 版本:5.1.1,从 4.2.7 升级
我有一个命中 URL 的集成测试(继承自 ActionDispatch::IntegrationTest)。该 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 或 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.action_controller.allow_forgery_protection = false
在这一点上,我没有想法。 cookie 在那里,看起来很好,它设置为请求的域,它没有过期,但 session 仍然是一个空的哈希。它没有以某种方式更新吗?它是否试图更新但默默地失败?我已经没有东西可以尝试了。
此测试在 Rails 4.2.7 下运行良好。
虽然我还没有完全深入研究它,但我也发现测试的 flash 变量似乎也总是空的。同样,在 Rails 4 中运行良好的测试正在中断,因为闪存似乎总是空的。我假设 flash 和 session 是相关的,所以也许同一个问题会影响它们。
【问题讨论】:
标签: ruby-on-rails ruby-on-rails-5