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

ruby – 使用Rack :: Test和Sinatra测试控制器实例变量

发布时间:2020-12-16 19:22:38 所属栏目:百科 来源:网络整理
导读:我有一个Sinatra应用程序,它以只读或可编辑的方式提供页面,具体取决于用户是否已登录. 控制器设置变量@can_edit,视图使用该变量来隐藏/显示编辑链接.如何在测试中测试@ can_edit的值?我不知道如何在Rack :: Test下获取控制器的当前实例. 我使用class_eval来
我有一个Sinatra应用程序,它以只读或可编辑的方式提供页面,具体取决于用户是否已登录.

控制器设置变量@can_edit,视图使用该变量来隐藏/显示编辑链接.如何在测试中测试@ can_edit的值?我不知道如何在Rack :: Test下获取控制器的当前实例.

我使用class_eval来存根logged_in?控制器中的方法,但我不得不求助于检查last_response.body以查看我的编辑链接,看看是否已设置@can_edit.

如何直接测试@can_edit的值?

解决方法

不幸的是,如果不修改Rack :: Test,我认为这是不可能的.在应用程序测试期间发出请求时,Rack :: Test会执行以下操作:

>将请求添加到最近请求列表中
>创建应用程序的新实例并调用其调用方法
>将您的应用程序的响应添加到最近的响应列表中

访问last_request和last_response很容易,但遗憾的是,在应用程序运行时没有保存有关应用程序状态的信息.

如果您有兴趣将Rack :: Test补丁一起打到这里,请先查看第30行的rack-test / lib / rack / mock_session.rb.这是Rack :: Test运行您的应用程序并接收标准机架应用程序返回值(状态,标题,正文).我的猜测是,您还必须修改您的应用程序,以收集并使其所有实例变量可访问.

无论如何,最好测试结果,而不是实现细节.如果要确保编辑链接不可见,请按DOM ID测试是否存在编辑链接:

assert last_response.body.match(/<a href="..." id="...">/)

(编辑:李大同)

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

    推荐文章
      热点阅读