我正在开发一个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”。我该如何解决这个问题?
答案 0 :(得分:0)
我解决了。我转到了Hartl的新指南,在那里我找到了一种方法来授权用户使用临时和持久性cookie。