class PryRescue::RSpec
def self.after(example)
def self.after(example) e = example.exception Pry::rescued(e) if e end
def self.after_filters
def self.after_filters @after_filters ||= [] end
def self.after_outside
def self.after_outside after_filters.each(&:call) end
def self.before
def self.before monkeypatch_capybara if defined?(Capybara) end
def self.monkeypatch_capybara
The after filter navigates to 'about:blank', but people debugging
Shunt Capybara's after filter from before Pry::rescued to after.
def self.monkeypatch_capybara unless Capybara.respond_to?(:reset_sessions_after_rescue!) class << Capybara alias_method :reset_sessions_after_rescue!, :reset_sessions! def reset_sessions! return if Capybara.raise_server_errors session_pool.reverse_each do |_mode, session| session.server.reset_error! end end end after_filters << Capybara.method(:reset_sessions_after_rescue!) end end
def self.run(example)
Takes care to ensure that `try-again` will work.
Run an Rspec example within Pry::rescue{ }.
def self.run(example) Pry::rescue do begin before example.example.instance_variable_set(:@exception, nil) example.example_group_instance.instance_variable_set(:@__init_memoized, true) example.run # Rescued will be called in :after hook, which is ran before the second # :around leg ensure after_outside end end end
def reset_sessions!
def reset_sessions! return if Capybara.raise_server_errors session_pool.reverse_each do |_mode, session| session.server.reset_error! end end