Причина проблемы
Второй пример не работает, потому что Capybara сбрасывает сеанс после каждого примера RSpec;страница, которую вы visit
отредактировали в своем блоке before :all
, больше не открыта в этот момент.Это явное поведение Капибары.Он находится в жемчужине capybara
, под /lib/capybara/rspec.rb
:
config.after do
if self.class.include?(Capybara::DSL)
Capybara.reset_sessions!
Capybara.use_default_driver
end
end
. Я гуглил пару часов и обнаружил, что несколько других борются с этим, но безрезультатно.
Iтакже обнаружил, что патч , который позволит настроить Capybara , а не для сброса сеанса после каждого предложенного примера ... но создатель Capybara jnicklas отклонил запрос на извлечение .
Решение
Самое быстрое - хотя, возможно, и не самое лучшее - работоспособное решение, которое я нашел (пока), - monkey-patch Capybara следующим образом:
module Capybara
class << self
alias_method :old_reset_sessions!, :reset_sessions!
def reset_sessions!; end
end
end
Это просто заставляет reset_sessions!
ничего не делать, когда его вызывают.Примечание: остерегайтесь непреднамеренных побочных эффектов!(Вы всегда можете вернуть alias_method
позже в своем коде, если вам нужно, чтобы поведение по умолчанию сбрасывалось снова.)