其他人遇到的相同问题: http://ruby-china.org/topics/13913 @RainFlying http://ruby-china.org/topics/12411 @diguage
在学习 Ruby on Rails Tutorial 的例子中,有一段测试混合了 rspec 和 capybara。 rails 4, capybara 2.2.1, rspec 2.14.1
before do
visit signin_path #访问登陆页面
click_button 'Sign In' #登陆,服务端设置cookie
patch user_path(wrong_user) #试图修改其他玩家的信息
response.should redirect_to(root_url) #服务端重定向到root
end
多次测试下来,总是重定向到 signin_path。我也纠结了一天,最终查看 log/test.log,看到patch时的cookie和登陆后的是不一样的,接下来的多次google和随便尝试,发现rspec和capybara并不共用一套cookie instance。
测试通过的方法:
#设置patch方法所依赖的cookies对象
cookies[:remember_token] = page.driver.request.cookies['remember_token']
patch user_path(wrong_user)