Skip to content

Instantly share code, notes, and snippets.

@johnbintz
Created January 20, 2012 22:08
Show Gist options
  • Save johnbintz/1649884 to your computer and use it in GitHub Desktop.
Save johnbintz/1649884 to your computer and use it in GitHub Desktop.
Get all the logging and exceptions from your Capybara-driven Rails app in your Cucumber environment
# come here mr. ducky, i just want to punch you
module Capybara
class << self
def logger_target
@logger_target ||= StringIO.new
end
attr_writer :backtrace_clean_patterns
def backtrace_clean_patterns
@backtrace_clean_patterns ||= [ %r{/gems/}, %r{/ruby/1} ]
end
end
end
Rails.logger = Logger.new(Capybara.logger_target)
Capybara.server do |app, port|
require 'rack/handler/webrick'
logger = Logger.new(Capybara.logger_target)
logger.level = Logger::WARN
responder = lambda { |request, response|
# ...and who's your friend over there, mr. ducky? maybe the want a punch, too.
class << response
def set_error(ex, backtrace = false)
bt = ex.backtrace.reject { |line| Capybara.backtrace_clean_patterns.any? { |pattern| line[pattern] } }
Capybara.logger_target << bt.collect { |line| " #{line}\n" }.join
Capybara.logger_target << "\n"
end
end
}
Rack::Handler::WEBrick.run(app, :Port => port, :AccessLog => [], :Logger => logger, :RequestCallback => responder)
end
Before do
Capybara.logger_target.rewind
Capybara.logger_target.truncate(0)
end
AfterStep do
Capybara.logger_target.rewind
data = Capybara.logger_target.read
$stderr.puts data if !data.empty?
Capybara.logger_target.truncate(0)
end
@hjhart
Copy link

hjhart commented Mar 28, 2019

@zedtux The capybara logger.level is set to Logger::WARN. You can set it to info or debug to get more output.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment