据我所知,你不能。集成测试中的会话值
(在 rails 3.2.2 中)是一个副本。 (Rails 众神:如果我是,请纠正我
错误。)您可以设置该值,但不会影响下一次获取/发布
因为它是真实会话的本地副本。非常适合断言测试,
在集成测试期间保持会话状态不是很好。
我有一个测试控制器来支持我通过 Evergreen 进行的 JavaScript 测试。
我的解决方案是向我的测试控制器添加一个方法和一个可用的路由
当我不在生产中时,我可以设置会话值。
基本上我的 app_test#set_session 方法会筛选参数名称
对于前缀,如果找到前缀,则会话的值
设置了去除前缀的参数名称。比如:
params.each() do |key, value|
next if ( key !~ /^set_session_/)
session[ key.slice( ("set_session_".size())..-1).to_sym ] = value
end
# don't forget to render something/anything
所以,在我的集成测试期间设置会话变量,我有一个小
像这样的代码块:
prefix = "set_session_"
post( "/set_session.html", { (prefix + "user_id") => "My Name Is Mudd" } )
不像“session[ :user_id ] = 'My Name Is Mudd'”那么漂亮,但它确实有效。
我的下一篇文章/get 将看到 session[ :user_id ] 设置为所需的值。
这很容易扩展到传递整数、符号等,当然,
可以一次设置多个会话键/值对。不漂亮,但是
还不错。