class RSpec::Core::Notifications::FailedExampleNotification
@see ExampleNotification
@attr [RSpec::Core::Example] example the current example
end
puts notification.exception.backtrace.join(“n”)
puts “Here’s my stack trace”
puts “Hey I failed :(”
def example_failed(notification)
@example
things useful for failed specs.
The ‘FailedExampleNotification` extends `ExampleNotification` with
def add_shared_group_lines(lines, colorizer)
def add_shared_group_lines(lines, colorizer) example.metadata[:shared_group_inclusion_backtrace].each do |frame| lines << colorizer.wrap(frame.description, RSpec.configuration.default_color) end lines end
def backtrace_formatter
def backtrace_formatter RSpec.configuration.backtrace_formatter end
def colorized_formatted_backtrace(colorizer=::RSpec::Core::Formatters::ConsoleCodes)
-
(Array
- the examples colorized backtrace lines)
Parameters:
-
colorizer
(#wrap
) -- An object to colorize the message_lines by
def colorized_formatted_backtrace(colorizer=::RSpec::Core::Formatters::ConsoleCodes) formatted_backtrace.map do |backtrace_info| colorizer.wrap "# #{backtrace_info}", RSpec.configuration.detail_color end end
def colorized_message_lines(colorizer=::RSpec::Core::Formatters::ConsoleCodes)
-
(Array
- The example failure message colorized)
Parameters:
-
colorizer
(#wrap
) -- An object to colorize the message_lines by
def colorized_message_lines(colorizer=::RSpec::Core::Formatters::ConsoleCodes) add_shared_group_lines(failure_lines, colorizer).map do |line| colorizer.wrap line, message_color end end
def description
-
(String)
- The example description
def description example.full_description end
def encoding_of(string)
def encoding_of(string) string.encoding end
def encoding_of(_string)
def encoding_of(_string) end
def exception
-
(Exception)
- The example failure
def exception example.execution_result.exception end
def exception_class_name
def exception_class_name name = exception.class.name.to_s name = "(anonymous error class)" if name == '' name end
def failure_lines
def failure_lines @failure_lines ||= begin lines = ["Failure/Error: #{read_failed_line.strip}"] lines << "#{exception_class_name}:" unless exception_class_name =~ /RSpec/ exception.message.to_s.split("\n").each do |line| lines << " #{line}" if exception.message end lines end end
def find_failed_line
def find_failed_line example_path = example.metadata[:absolute_file_path].downcase exception.backtrace.find do |line| next unless (line_path = line[/(.+?):(\d+)(|:\d+)/, 1]) File.expand_path(line_path).downcase == example_path end end
def formatted_backtrace
-
(Array
- the examples backtrace lines)
def formatted_backtrace backtrace_formatter.format_backtrace(exception.backtrace, example.metadata) end
def formatted_message_and_backtrace(colorizer)
def formatted_message_and_backtrace(colorizer) formatted = "" colorized_message_lines(colorizer).each do |line| formatted << RSpec::Support::EncodedString.new(" #{line}\n", encoding_of(formatted)) end colorized_formatted_backtrace(colorizer).each do |line| formatted << RSpec::Support::EncodedString.new(" #{line}\n", encoding_of(formatted)) end formatted end
def fully_formatted(failure_number, colorizer=::RSpec::Core::Formatters::ConsoleCodes)
-
(String)
- The failure information fully formatted in the way that
def fully_formatted(failure_number, colorizer=::RSpec::Core::Formatters::ConsoleCodes) "\n #{failure_number}) #{description}\n#{formatted_message_and_backtrace(colorizer)}" end
def message_color
def message_color RSpec.configuration.failure_color end
def message_lines
-
(Array
- The example failure message)
def message_lines add_shared_group_lines(failure_lines, NullColorizer) end
def read_failed_line
def read_failed_line matching_line = find_failed_line unless matching_line return "Unable to find matching line from backtrace" end file_path, line_number = matching_line.match(/(.+?):(\d+)(|:\d+)/)[1..2] if File.exist?(file_path) File.readlines(file_path)[line_number.to_i - 1] || "Unable to find matching line in #{file_path}" else "Unable to find #{file_path} to read failed line" end rescue SecurityError "Unable to read failed line" end