加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – 如何在Rails集成测试中设置会话变量

发布时间:2020-12-16 19:11:34 所属栏目:百科 来源:网络整理
导读:在Rails集成测试中,如何设置会话变量(在我的情况下为:user_id)? 显然,它不是一个完整的集成测试,但鉴于在我的应用程序中用户身份验证不能在没有手动用户交互的情况下发生,我可以以某种方式解决并手动设置会话变量吗? 尝试了以下内容:“session”在该范围
在Rails集成测试中,如何设置会话变量(在我的情况下为:user_id)?

显然,它不是一个完整的集成测试,但鉴于在我的应用程序中用户身份验证不能在没有手动用户交互的情况下发生,我可以以某种方式解决并手动设置会话变量吗?

尝试了以下内容:“session”在该范围内不可用,open_session返回一个我没有找到更新方法的会话.

解决方法

据我所知,你做不到.集成测试中的会话值
(在轨道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]设置了所需的值.

这很容易扩展为传递整数,符号等,当然,可以一次设置多个会话键/值对.不漂亮,但是不错.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读