Module: Minitest

Includes:
RunRespectingRakeTestopts
Defined in:
lib/rails/test_unit/minitest_plugin.rb

Defined Under Namespace

Modules: RunRespectingRakeTestopts Classes: RunVia, SuppressedSummaryReporter

Class Method Summary collapse

Methods included from RunRespectingRakeTestopts

#run

Class Method Details

.plugin_rails_init(options) ⇒ Object

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



85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
# File 'lib/rails/test_unit/minitest_plugin.rb', line 85

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, or if run
  # via `rake` then they have already been eagerly required.
  unless run_via.ruby? || run_via.rake?
    # If there are no given patterns, we can assume that the user
    # simply runs the `bin/rails test` command without extra arguments.
    if options[:patterns].empty?
      ::Rails::TestRequirer.require_files(options[:patterns], ["test/system/**/*"])
    else
      ::Rails::TestRequirer.require_files(options[:patterns])
    end
  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
59
60
61
62
63
# File '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

  opts.on("-w", "--warnings",
          "Enable ruby warnings") do
    $VERBOSE = true
  end

  options[:color] = true
  options[:output_inline] = true
  options[:patterns] = opts.order! unless run_via.rake?
end

.rake_run(patterns, exclude_patterns = []) ⇒ Object

:nodoc:



65
66
67
68
69
# File 'lib/rails/test_unit/minitest_plugin.rb', line 65

def self.rake_run(patterns, exclude_patterns = []) # :nodoc:
  self.run_via = :rake unless run_via.set?
  ::Rails::TestRequirer.require_files(patterns, exclude_patterns)
  autorun
end

.run_via=(runner) ⇒ Object



111
112
113
114
115
116
117
# File 'lib/rails/test_unit/minitest_plugin.rb', line 111

def self.run_via=(runner)
  if run_via.set?
    raise ArgumentError, "run_via already assigned"
  else
    run_via.runner = runner
  end
end