Module: Minitest

Defined in:
railties/lib/rails/test_unit/minitest_plugin.rb

Defined Under Namespace

Modules: RunRespectingRakeTestopts Classes: 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.


81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
# File 'railties/lib/rails/test_unit/minitest_plugin.rb', line 81

def self.plugin_rails_init(options)
  ENV["RAILS_ENV"] = options[:environment] || "test"

  # If run via `ruby` we've been passed the files to run directly.
  unless run_via[:ruby]
    ::Rails::TestRequirer.require_files(options[:patterns])
  end

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

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

.plugin_rails_options(opts, options) ⇒ Object


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
57
58
# File 'railties/lib/rails/test_unit/minitest_plugin.rb', line 14

def self.plugin_rails_options(opts, options)
  executable = ::Rails::TestUnitReporter.executable
  opts.separator ""
  opts.separator "Usage: #{executable} [options] [files or directories]"
  opts.separator "You can run a single test by appending a line number to a filename:"
  opts.separator ""
  opts.separator "    #{executable} test/models/user_test.rb:27"
  opts.separator ""
  opts.separator "You can run multiple files and directories at the same time:"
  opts.separator ""
  opts.separator "    #{executable} test/controllers test/integration/login_test.rb"
  opts.separator ""
  opts.separator "By default test failures and errors are reported inline during a run."
  opts.separator ""

  opts.separator "Rails options:"
  opts.on("-e", "--environment ENV",
          "Run tests in the ENV environment") do |env|
    options[:environment] = env.strip
  end

  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

  options[:color] = true
  options[:output_inline] = true
  options[:patterns] = defined?(@rake_patterns) ? @rake_patterns : opts.order!
end

.rake_run(patterns) ⇒ Object

Running several Rake tasks in a single command would trip up the runner, as the patterns would also contain the other Rake tasks.


62
63
64
65
# File 'railties/lib/rails/test_unit/minitest_plugin.rb', line 62

def self.rake_run(patterns) # :nodoc:
  @rake_patterns = patterns
  autorun
end