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

前端之家收集整理的这篇文章主要介绍了ruby – 使用Rack :: Test和Sinatra测试控制器实例变量前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个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="...">/)

猜你在找的Ruby相关文章