`
robbin
  • 浏览: 4826875 次
  • 性别: Icon_minigender_1
  • 来自: 上海
博客专栏
377a9ecd-1ea1-34ac-9530-9daa53bb2a7b
robbin谈管理
浏览量:137539
社区版块
存档分类
最新评论

ActionController::TestSession的bug?

    博客分类:
  • Ruby
阅读更多
我在看《Agile Web Development with rails》这本书第二版的单元测试这一章,其中在functional test这一部分,rails提供了一些模拟浏览器请求的get,post等方法,其支持参数格式例如:

get :action, {params}, {session}, {flash}

然后这本书第202页给出一个指定Session的例子为:

  def test_index_with_user
    get :index, {}, {:user_id => users(:dave).id}
    assert_equal(users(:dave).id, session[:user_id])
    assert_response :success
    assert_template "index"
  end


但是实际跑这个测试,却发现程序无论如何拿不到session[:user_id],十分纳闷,在程序里面PP.pp session,发现TestSession对象的属性@attributes{:user_id => 1}已经有了,但是就是拿不出来,奇怪,实在奇怪。

无奈只得去趴rails的ActionController::TestSession的源代码,终于在test_processor.rb里面找到,第291行:

    def [](key)
      data[key.to_s]
    end

    def []=(key, value)
      data[key.to_s] = value
    end


嗯,用string做key,没有提供用symbol做key的取法,于是把上面测试代码中get这一行修改,原来是:
get :index, {}, {:user_id => users(:dave).id}

现在改为:
 get :index, {}, {"user_id" => users(:dave).id}


测试程序顺利通过!

问题解决了,不过我不知道这算不算一个bug啊?大家说呢?我是不是应该提交一个issue过去啊?
分享到:
评论
6 楼 dunsword 2007-07-11  
我也在这个问题上卡了很久
5 楼 1073X 2007-04-23  
以前对博主在论坛里的态度很不满意,不过看了这篇帖子,觉得博主确实有过人之处.

感谢博主提供了这么有价值的信息 !!!
4 楼 dongbin 2007-02-13  
@request.session[:user_id]=users('bob').id
3 楼 robbin 2007-02-13  
dongbin 写道
这么调用比较少见,对session的赋值一般是写在setup里面的。或者通过调用登录的Controller来模拟登录。


那么如何在funciontal test的setup对session赋值呢?
2 楼 dongbin 2007-02-13  
这么调用比较少见,对session的赋值一般是写在setup里面的。或者通过调用登录的Controller来模拟登录。
1 楼 axgle 2007-02-13  
我也遇到了

相关推荐

    Bug的分级和流程处理说明

    "Bug的分级和流程处理说明" ...Open a new bug by Test(Change Status to ”Open”) Special Bug (Difficult to resolve) Confirm by Group Will fix? Y Update Bug(Change Resolution to ”Postponed”) N

    ASP.NETCORE教程—附源码

    {Domain}/{Controller}/{Action} 数据形式 QueryString: ?name=zhangsan&age=22 Form Cookie Session Header HttpRequest HttpRequest 是⽤户请求对象 提供获取请求数据的属性 Cookies,Headers,Query,QueryString,...

    Records:具有原型继承的相关类型可扩展记录

    test2Tytest2 = ( " meh " := 10 ) :: testtest2Ty = proof search去掉 test3 : ?test3Tytest3 = getProof $ " meh " - testtest3Ty = proof search更新 test4 : ?test4Tytest4 = getProof $ ( " meh " := 11 ) -: ...

    中文文章:怎样写testbench(xilinx的)

    ### 如何撰写 Xilinx 的 Testbench #### 一、引言 在数字系统设计领域,尤其是采用FPGA作为实现平台时,验证所设计模块的正确性至关重要。Testbench是一种用于测试设计实体(如FPGA模块)的软件脚本,它可以产生...

    TestController.java

    TestController.java

    bugfree帮助文档

    Bugfree的核心功能包括缺陷管理、测试用例(Test Case)管理和测试结果(Test Result)管理。在Bugfree 2中,它进一步集成了Test Case和Test Result的管理,使得测试流程更加顺畅。 **一、BugFree系统简介** 1. **...

    session_test.zip

    在Java Web开发中,Session是服务器端用于保持用户状态的一种机制。当用户通过登录界面验证后,服务器会创建一个Session对象,并将用户的登录信息(如用户名、用户ID等)存储在这个Session中。这样,每当用户在网站...

    QCure - Web Application Penetration Test Report【客户安全公司测试报告】.pdf

    1:User table rows stored in session (浏览器缓存中缓存了过多的信息): 目前不修改, application=>storage==>session stroage 2: File Upload Related bug (上传文件把不相关的后缀文件上传): ??? 3:...

    Thoughtful Machine Learning with Python: A Test-Driven Approach

    Thoughtful Machine Learning with Python: A Test-Driven Approach English | 25 Aug. 2016 | ISBN: 1491924136 | 250 Pages | AZW3/MOBI/EPUB/PDF (conv) | 16.77 MB By teaching you how to code machine-...

    testSession:测试 Mongo Session Store

    Mongo Session Store是基于MongoDB数据库实现的会话存储解决方案,主要应用于Node.js环境中,用于管理和持久化Web应用程序的用户会话。在JavaScript编程语言中,MongoDB Session Store提供了一个中间件,使得开发者...

    bugfree的使用

    - 使用test1用户登录BugFree,然后创建新的BUG。在创建时,要填写详细信息,并指派给developer1。同时,可以填写“创建BUILD”项,指定版本名,保存后,BUG信息将通过邮件发送给developer1。 7. **处理BUG**: - ...

    Bug的生命周期 TD

    本文将深入探讨“Bug的生命周期”这一主题,特别是在TD(Test Director,一种测试管理工具)中的应用。 首先,我们要理解Bug生命周期的基本概念。一个Bug从被发现到最终解决,通常会经历以下几个阶段: 1. **新建...

    超算入门-作业提交

    how to use the HPC test@node69:~> bjobs -aw JOBID USER STAT QUEUE FROM_HOST EXEC_HOST JOB_NAME SUBMIT_TIME 818 test RUN QS_Norm node69 4*node10 mpirun.lsf /public/software/dock6-openmpi/bin/dock6.mpi ...

    Tomcat8-Redis3-Session共享实际使用版本,生产可用

    start.bat,直接访问http://localhost:8081/test ---http://localhost:8082/test----可直接发现session 相同,具体session有效期以server中默认30分钟,设置后在redis -->pttl key 查看session有效期.返回为毫秒数

    response_sendRedirect和request_getRequestDispatcher()_forward的区别.

    表单form的action="/uu";sendRedirect("/uu");表示相对于服务器根路径。如http://localhost:8080/Test应用(则提交至http://localhost:8080/uu); Forward代码中的"/uu"则代表相对与WEB应用的路径。如...

    Thinkphp3.2.3安全开发须知

    Thinkphp3.2.3是一个流行的PHP MVC(Model-View-Controller)框架,它简化了Web应用的开发过程。然而,框架的便利性也可能带来安全漏洞,因此,开发者需要对其工作原理有深入的理解。 1. **SQL注入**:在处理用户...

Global site tag (gtag.js) - Google Analytics