Ответ 1
Причина проблемы
Второй пример не работает, потому что Capybara сбрасывает сеанс после каждого примера RSpec; страница visit
-ed в вашем блоке 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
Я отправился в путь на пару часов и обнаружил, что некоторые другие борются с этим, но безуспешно.
Я также обнаружил, что патч который позволит Capybara быть настроен не на reset сеанс после каждого примера. но создатель Capybara jnicklas отклонил запрос на перенос.
Решение
Самое быстрое - хотя, возможно, не лучшее - работоспособное решение, которое я нашел (до сих пор) - обезьяна-патч Capybara таким образом
module Capybara
class << self
alias_method :old_reset_sessions!, :reset_sessions!
def reset_sessions!; end
end
end
Это просто делает reset_sessions!
ничего не делать при вызове. Примечание: Остерегайтесь непреднамеренных побочных эффектов! (Вы всегда можете вернуть alias_method
позже в свой код, если вам понадобится повторное поведение сброса по умолчанию.)