Я разрабатываю приложение для рельсов, и я следую знаменитому учебнику Майкла Хартла. Я использую более новые версии RSpec и Capybara и поэтому столкнулся с проблемой. Начиная с Capybara 2, вам нужно place tests using Capybara in spec/features. RSpec Capybara does no longer работа в запросе спецификация. Решение, которое дает Hartl, поэтому больше не работает (он ставит все свои тесты в spec/request).Войти пользователя без Capybara в запросе spec
Мне нужно войти в систему без использования 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» выше. Как я могу это решить?