在Rails集成测试中,如何设置会话变量(在我的情况下为:user_id)?
显然,它不是一个完整的集成测试,但鉴于在我的应用程序中用户身份验证不能在没有手动用户交互的情况下发生,我可以以某种方式解决并手动设置会话变量吗?
解决方法
据我所知,你做不到.集成测试中的会话值
(在轨道3.2.2中)是一份副本. (Rails众神:如果我是,请纠正我
错误.)您可以设置值,但不会影响下一个获取/发布
因为它是真实会话的本地副本.非常适合断言测试,
在集成测试期间保持状态不是很好.
(在轨道3.2.2中)是一份副本. (Rails众神:如果我是,请纠正我
错误.)您可以设置值,但不会影响下一个获取/发布
因为它是真实会话的本地副本.非常适合断言测试,
在集成测试期间保持状态不是很好.
我有一个测试控制器来支持我通过Evergreen进行的JavaScript测试.
我的解决方案是为我的测试控制器添加一个方法和一个可用的路由
当我不在制作中时,它允许我设置会话值.
基本上我的app_test #set_session方法会屏蔽参数名称
对于前缀,如果找到前缀,则为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] =’我的名字是Mudd’”那么漂亮,但它确实有效.
我的下一篇文章/ get将看到session [:user_id]设置了所需的值.
这很容易扩展为传递整数,符号等,当然,可以一次设置多个会话键/值对.不漂亮,但是不错.