Module: Minitest

Defined in:
railties/lib/minitest/rails_plugin.rb

Defined Under Namespace

Classes: BacktraceFilterWithFallback, ProfileReporter, SuppressedSummaryReporter

Class Method Summary collapse

Class Method Details

.plugin_rails_init(options) ⇒ Object

Owes great inspiration to test runner trailblazers like RSpec, minitest-reporters, maxitest, and others.



147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
# File 'railties/lib/minitest/rails_plugin.rb', line 147

def self.plugin_rails_init(options)
  # Don't mess with Minitest unless RAILS_ENV is set
  return unless ENV["RAILS_ENV"] || ENV["RAILS_MINITEST_PLUGIN"]

  unless options[:full_backtrace]
    # Plugin can run without Rails loaded, check before filtering.
    if ::Rails.respond_to?(:backtrace_cleaner)
      Minitest.backtrace_filter = BacktraceFilterWithFallback.new(::Rails.backtrace_cleaner, Minitest.backtrace_filter)
    end
  end

  # Suppress summary reports when outputting inline rerun snippets.
  if reporter.reporters.reject! { |reporter| reporter.kind_of?(SummaryReporter) }
    reporter << SuppressedSummaryReporter.new(options[:io], options)
  end

  # Replace progress reporter for colors.
  if reporter.reporters.reject! { |reporter| reporter.kind_of?(ProgressReporter) }
    reporter << ::Rails::TestUnitReporter.new(options[:io], options)
  end

  # Add slowest tests reporter at the end.
  if options[:profile]
    reporter << ProfileReporter.new(options[:io], options)
  end
end

.plugin_rails_options(opts, options) ⇒ Object



93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
# File 'railties/lib/minitest/rails_plugin.rb', line 93

def self.plugin_rails_options(opts, options)
  ::Rails::TestUnit::Runner.attach_before_load_options(opts)

  opts.on("-b", "--backtrace", "Show the complete backtrace") do
    options[:full_backtrace] = true
  end

  opts.on("-d", "--defer-output", "Output test failures and errors after the test run") do
    options[:output_inline] = false
  end

  opts.on("-f", "--fail-fast", "Abort test run on first failure or error") do
    options[:fail_fast] = true
  end

  opts.on("-c", "--[no-]color", "Enable color in the output") do |value|
    options[:color] = value
  end

  opts.on("--profile [COUNT]", "Enable profiling of tests and list the slowest test cases (default: 10)") do |value|
    default_count = 10

    if value.nil?
      count = default_count
    else
      count = Integer(value, exception: false)
      if count.nil?
        warn("Non integer specified as profile count, separate " \
             "your path from options with -- e.g. " \
             "`#{::Rails::TestUnitReporter.executable} --profile -- #{value}`")
        count = default_count
      end
    end

    options[:profile] = count
  end

  opts.on(/^[^-]/) do |test_file|
    options[:test_files] ||= []
    options[:test_files] << test_file
  end

  options[:color] = true
  options[:output_inline] = true

  opts.on do
    if ::Rails::TestUnit::Runner.load_test_files
      ::Rails::TestUnit::Runner.load_tests(options.fetch(:test_files, []))
    end
  end
end