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

ruby-on-rails – Rails – 失去与Integration Tests和Capybara

发布时间:2020-12-16 19:47:56 所属栏目:百科 来源:网络整理
导读:我正在使用Rails 3.1.0.rc4,我正在努力使用capybara的新的类似牛扒的DSL和Rspec进行集成测试(使用Devise身份验证) 我遇到的问题是,当我运行集成测试时,来自capybara的机架测试驱动程序似乎完全失去了用户的登录会话,实际上,会话似乎完全清除了. 经过几天的调
我正在使用Rails 3.1.0.rc4,我正在努力使用capybara的新的类似牛扒的DSL和Rspec进行集成测试(使用Devise身份验证)

我遇到的问题是,当我运行集成测试时,来自capybara的机架测试驱动程序似乎完全失去了用户的登录会话,实际上,会话似乎完全清除了.

经过几天的调试,我完全失去了为什么.逐行通过中间件堆栈,我相信我已经将问题归结为导致此问题的ActiveRecord :: SessionStore中的一些问题.我读了here,如果无法验证CSRF令牌,Rails将会清除会话,这让我相信我有一些配置错误,并且由于某种原因,这一个测试不正确地验证CSRF令牌.

这是在/ initializers目录中的session_store.rb中的内容:

MyApp::Application.config.session_store :active_record_store

谁知道关于CSRF保护的任何人有什么潜在的为什么会发生这种情况?

另外,这里有一些要注意的事情:

>我试图测试的东西实际上在浏览器本身中工作,只有这一个测试正在放弃会话
>会话似乎被删除后提交的表单,其中的操作url是另一个服务器.我在测试中使用VCR gem来捕获对这个外部服务器的请求/响应,而且我相信我已经将外部请求作为问题排除了,这可能与CSRF令牌无法验证有直接关系,从而清除会话.
>其他涉及登录/使用会话的测试不会删除会话

任何人都可以给我任何关于这里发生的事情的线索,为什么一个测试似乎是任意地丢弃会话并失败在我身上?我做了很多调试,并尝试了我可以想到的一切.

解决方法

我也是新来的水豚,我也有类似的问题.

我试图登录一个用户做这样的事情:

post user_session_path,:user => {:email => user.email,:password => 'superpassword'}

而且,这是正常的工作,直到我试图做一些与水豚的事情,如访问一个页面,只是测试用户是否登录.这个简单的测试没有传递:

visit root_path
page.should have_content("logout") #if the user is logged in then the logout link should be present

起初我以为水豚正在清理会议,但我错了.花了我一段时间才意识到的是,司机capybara正在使用自己的会话,所以从capybara的角度来看,我的用户没有登录,为此你必须这样做

page.driver.post user_session_path,:password => 'superpassword'}

不知道如果这是你的情况,但希望有帮助.

(编辑:李大同)

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

    推荐文章
      热点阅读