在请求规范中没有Capybara的登录用户

时间:2014-10-28 16:30:21

标签: ruby-on-rails-4 rspec2

我正在开发一个rails应用程序,我正在关注Michael Hartl的着名教程。我正在使用较新版本的RSpec和Capybara,因此遇到了问题。从Capybara 2开始,你需要place tests using Capybara in spec/features。 RSpec Capybara does no longer在请求规范中工作。因此,Hartl给出的解决方案不再有效(他将所有测试都放在规范/请求中)。

我需要在请求测试中登录没有Capybara的用户(因为测试使用“put”,这仅在请求规范中可用)。其他有同样问题的人似乎用以下方法解决了这个问题:

post login_path(session: { password: user.password, email: user.email })
cookies[:remember_token] = user.remember_token

但是我收到了错误:

Failure/Error: before { valid_login_request(user) }
 NoMethodError:
   undefined method `[]' for nil:NilClass
 # ./app/controllers/sessions_controller.rb:7:in `create'
 # ./spec/support/utilities.rb:13:in `valid_login_request'
 # ./spec/requests/authentication_pages_spec.rb:22:in `block (4 levels) in <top (required)>'

和sessions_controller.rb:7是以下代码:

 user = User.find_by_email(params[:session][:email])

经过一番研究后,我发现会话是零,这就是为什么我得到上面的“NoMethodError”。我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

我解决了。我转到了Hartl的新指南,在那里我找到了一种方法来授权用户使用临时和持久性cookie。