ruby-on-rails – Rails – 失去与Integration Tests和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保护的任何人有什么潜在的为什么会发生这种情况? 另外,这里有一些要注意的事情: >我试图测试的东西实际上在浏览器本身中工作,只有这一个测试正在放弃会话 任何人都可以给我任何关于这里发生的事情的线索,为什么一个测试似乎是任意地丢弃会话并失败在我身上?我做了很多调试,并尝试了我可以想到的一切. 解决方法
我也是新来的水豚,我也有类似的问题.
我试图登录一个用户做这样的事情: 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'} 不知道如果这是你的情况,但希望有帮助. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |