1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
|
require 'rspec/core/formatters/base_text_formatter'
class RSpec::Retry::Formatter < RSpec::Core::Formatters::BaseTextFormatter
RSpec::Core::Formatters.register self, :example_passed
def initialize(output)
super(output)
@tries = Hash.new { |h, k| h[k] = { successes: 0, tries: 0 } }
end
def seed(_); end
def message(_message); end
def close(_); end
def dump_failures(_); end
def dump_pending(_); end
def dump_summary(notification)
summary = "\nRSpec Retry Summary:\n"
@tries.each do |key, retry_data|
next if retry_data[:successes] < 1 || retry_data[:tries] <= 1
summary += "\t#{key.location}: #{key.full_description}: passed at attempt #{retry_data[:tries]}\n"
end
retried = @tries.count { |_, v| v[:tries] > 1 && v[:successes] > 0 }
summary += "\n\t#{retried} of #{notification.example_count} tests passed with retries.\n"
summary += "\t#{notification.failure_count} tests failed all retries.\n"
output.puts summary
end
def example_passed(notification)
increment_success notification.example
end
def retry(example)
increment_tries example
end
private
def increment_success(example)
# debugger
previous = @tries[example]
@tries[example] = {
successes: previous[:successes] + 1, tries: previous[:tries] + 1 }
end
def increment_tries(example)
# debugger
previous = @tries[example]
@tries[example] = {
successes: previous[:successes], tries: previous[:tries] + 1 }
end
end
|