Class: RSpecTelemetry::ConsoleReport

Inherits:
Object
  • Object
show all
Includes:
Helpers
Defined in:
lib/rspec_telemetry/console_report.rb

Defined Under Namespace

Modules: Helpers

Class Method Summary collapse

Instance Method Summary collapse

Methods included from Helpers

fmt, pct, section, truncate

Constructor Details

#initialize(analyzer, files_count:, top: 15) ⇒ ConsoleReport

Returns a new instance of ConsoleReport.



22
23
24
25
26
# File 'lib/rspec_telemetry/console_report.rb', line 22

def initialize(analyzer, files_count:, top: 15)
  @analyzer = analyzer
  @files_count = files_count
  @top = top
end

Class Method Details

.drill_down(events, example_id) ⇒ Object



35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
# File 'lib/rspec_telemetry/console_report.rb', line 35

def self.drill_down(events, example_id)
  lines = Helpers.section("Example: #{example_id}")
  finished = events.find { |e| e["type"] == "example.finished" }
  if finished
    lines << "  #{finished["full_description"]}"
    lines << "  status: #{finished["status"]}   duration: #{Helpers.fmt(finished["duration_ms"])}"
  end

  factories = events.select { |e| e["type"] == "factory_bot.run_factory" }
  return lines.join("\n") if factories.empty?

  lines << ""
  lines << "  FactoryBot calls (indented by nesting depth):"
  factories.each { |f| lines << factory_line(f) }
  total = factories.sum { |f| (f["self_duration_ms"] || f["duration_ms"]).to_f }
  lines << ""
  lines << "  factory self total: #{Helpers.fmt(total)} across #{factories.size} calls"
  lines.join("\n")
end

.factory_line(fields) ⇒ Object



55
56
57
58
59
60
61
# File 'lib/rspec_telemetry/console_report.rb', line 55

def self.factory_line(fields)
  indent = "    " + ("  " * fields["depth"].to_i)
  traits = Array(fields["traits"]).empty? ? "" : " [#{fields["traits"].join(",")}]"
  self_ms = fields["self_duration_ms"] || fields["duration_ms"]
  "#{indent}#{fields["factory"]}:#{fields["strategy"]}#{traits}  " \
    "self #{Helpers.fmt(self_ms)} / total #{Helpers.fmt(fields["duration_ms"])}"
end

Instance Method Details

#renderObject



28
29
30
31
32
33
# File 'lib/rspec_telemetry/console_report.rb', line 28

def render
  lines = overview + slow_files + slow_examples + top_factories
  lines << ""
  lines << "Tip: drill into one example with `rspec-telemetry --example \"<example_id>\"`"
  lines.join("\n")
end