Module: Flores::RSpec::Formatters

Defined in:
lib/flores/namespace.rb

Overview

rubocop:disable Style/ClassAndModuleChildren

Constant Summary collapse

Analyze =
Class.new(RSpec::Core::Formatters::BaseTextFormatter) do
  RSpec::Core::Formatters.register self, :dump_failures, :dump_summary

  def dump_summary(event)
    # The event is an RSpec::Core::Notifications::SummaryNotification
    # Let's mimic the BaseTextFormatter but without the failing test report
    output.puts 
    output.puts "Finished in #{event.formatted_duration}"
    output.puts "#{event.colorized_totals_line}"
  end

  def dump_failures(event)
    output.puts
    group = event.examples.each_with_object(Hash.new { |h, k| h[k] = [] }) do |e, m| 
      m[e.[:full_description]] << e
      m
    end
    group.each { |description, examples| dump_example_summary(description, examples) }
  end

  def dump_example_summary(description, examples)
    output.puts description
    analysis = Flores::RSpec::Analyze::Analysis.new(group_by_result(examples))
    output.puts(analysis.to_s.gsub(/^/, "  "))
  end

  def group_by_result(examples) # rubocop:disable Metrics/AbcSize
    examples.each_with_object(Hash.new { |h, k| h[k] = [] }) do |example, results|
      if example.[:execution_result].status == :passed
        results[:success] << [example.[:values], nil]
      else
        exception = example.[:execution_result].exception
        results[exception.class] << [example.[:values], exception]
      end
      results
    end
  end

  def method_missing(m, *args)
    p m => args
  end
end