Class: Rails::TestUnit::Runner

Inherits:
Object
  • Object
show all
Defined in:
railties/lib/rails/test_unit/runner.rb

Constant Summary collapse

TEST_FOLDERS =
[:models, :helpers, :channels, :controllers, :mailers, :integration, :jobs, :mailboxes]
PATH_ARGUMENT_PATTERN =
%r"^(?!/.+/$)[.\w]*[/\\]"

Class Method Summary collapse

Class Method Details

.attach_before_load_options(opts) ⇒ Object



31
32
33
34
# File 'railties/lib/rails/test_unit/runner.rb', line 31

def attach_before_load_options(opts)
  opts.on("--warnings", "-w", "Run with Ruby warnings enabled") { }
  opts.on("-e", "--environment ENV", "Run tests in the ENV environment") { }
end

.compose_filter(runnable, filter) ⇒ Object



82
83
84
85
86
87
88
89
90
# File 'railties/lib/rails/test_unit/runner.rb', line 82

def compose_filter(runnable, filter)
  filter = normalize_declarative_test_filter(filter)

  if filters.any? { |_, lines| lines.any? }
    CompositeFilter.new(runnable, filter, filters)
  else
    filter
  end
end

.load_tests(argv) ⇒ Object



61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
# File 'railties/lib/rails/test_unit/runner.rb', line 61

def load_tests(argv)
  patterns = extract_filters(argv)
  tests = list_tests(patterns)
  tests.to_a.each do |path|
    abs_path = File.expand_path(path)
    require abs_path
  rescue LoadError => exception
    if exception.path == abs_path
      all_tests = list_tests([default_test_glob])
      corrections = DidYouMean::SpellChecker.new(dictionary: all_tests).correct(path)

      if corrections.empty?
        raise exception
      end
      raise(InvalidTestError.new(path, DidYouMean::Formatter.message_for(corrections)), cause: nil)
    else
      raise
    end
  end
end

.parse_options(argv) ⇒ Object



36
37
38
39
40
41
42
43
44
45
46
47
# File 'railties/lib/rails/test_unit/runner.rb', line 36

def parse_options(argv)
  # Perform manual parsing and cleanup since option parser raises on unknown options.
  env_index = argv.index("--environment") || argv.index("-e")
  if env_index
    argv.delete_at(env_index)
    environment = argv.delete_at(env_index).strip
  end
  ENV["RAILS_ENV"] = environment || "test"

  w_index = argv.index("--warnings") || argv.index("-w")
  $VERBOSE = argv.delete_at(w_index) if w_index
end

.run(argv = []) ⇒ Object



55
56
57
58
59
# File 'railties/lib/rails/test_unit/runner.rb', line 55

def run(argv = [])
  load_tests(argv)

  require "active_support/testing/autorun"
end

.run_from_rake(test_command, argv = []) ⇒ Object



49
50
51
52
53
# File 'railties/lib/rails/test_unit/runner.rb', line 49

def run_from_rake(test_command, argv = [])
  # Ensure the tests run during the Rake Task action, not when the process exits
  success = system("rails", test_command, *argv, *Shellwords.split(ENV["TESTOPTS"] || ""))
  success || exit(false)
end