diff options
author | Prem Sichanugrist <s@sikac.hu> | 2013-02-01 17:21:09 -0500 |
---|---|---|
committer | Prem Sichanugrist <s@sikac.hu> | 2013-03-09 16:03:55 -0500 |
commit | 176b57c5430ddae7668114994c35b3293b0a05a5 (patch) | |
tree | 6128b0b1c415c12e54eeaf5808707d27d926093c /railties | |
parent | 9f75f7735ac387e9d44db511c5cef7b7453f6bba (diff) | |
download | rails-176b57c5430ddae7668114994c35b3293b0a05a5.tar.gz rails-176b57c5430ddae7668114994c35b3293b0a05a5.tar.bz2 rails-176b57c5430ddae7668114994c35b3293b0a05a5.zip |
Add support for MiniTest flags in TestRunner
Any flags that got set will be passed through to MiniTest::Unit.runner,
such as `-n`, `-s-, and `-v`.
Diffstat (limited to 'railties')
-rw-r--r-- | railties/lib/rails/commands.rb | 15 | ||||
-rw-r--r-- | railties/lib/rails/commands/test_runner.rb | 91 | ||||
-rw-r--r-- | railties/test/application/test_runner_test.rb | 21 |
3 files changed, 88 insertions, 39 deletions
diff --git a/railties/lib/rails/commands.rb b/railties/lib/rails/commands.rb index c76af7d01f..2984999a3c 100644 --- a/railties/lib/rails/commands.rb +++ b/railties/lib/rails/commands.rb @@ -83,15 +83,12 @@ when 'server' when 'test' $LOAD_PATH.unshift("./test") require 'rails/commands/test_runner' - if ["-h", "--help"].include?(ARGV.first) - Rails::TestRunner.help_message - exit - else - require APP_PATH - Rails.application.require_environment! - Rails.application.load_tasks - Rails::TestRunner.start(ARGV) - end + options = Rails::TestRunner.parse_arguments(ARGV) + + require APP_PATH + Rails.application.require_environment! + Rails.application.load_tasks + Rails::TestRunner.start(ARGV, options) when 'dbconsole' require 'rails/commands/dbconsole' diff --git a/railties/lib/rails/commands/test_runner.rb b/railties/lib/rails/commands/test_runner.rb index a65b508505..33c32bb94f 100644 --- a/railties/lib/rails/commands/test_runner.rb +++ b/railties/lib/rails/commands/test_runner.rb @@ -9,54 +9,85 @@ module Rails # of file to a new +TestRunner+ object, then invoke the evaluation. If # the argument is not a test suite name, it will be treated as a file # name and passed to the +TestRunner+ instance right away. - def start(arguments) - case arguments.first + def start(files, options) + case files.first when nil - new(Dir['test/**/*_test.rb']).run + new(Dir['test/**/*_test.rb'], options).run when 'models' - new(Dir['test/models/**/*_test.rb']).run + new(Dir['test/models/**/*_test.rb'], options).run when 'helpers' - new(Dir['test/helpers/**/*_test.rb']).run + new(Dir['test/helpers/**/*_test.rb'], options).run when 'units' - new(Dir['test/{models,helpers,unit}/**/*_test.rb']).run + new(Dir['test/{models,helpers,unit}/**/*_test.rb'], options).run when 'controllers' - new(Dir['test/controllers/**/*_test.rb']).run + new(Dir['test/controllers/**/*_test.rb'], options).run when 'mailers' - new(Dir['test/mailers/**/*_test.rb']).run + new(Dir['test/mailers/**/*_test.rb'], options).run when 'functionals' - new(Dir['test/{controllers,mailers,functional}/**/*_test.rb']).run + new(Dir['test/{controllers,mailers,functional}/**/*_test.rb'], options).run when 'integration' - new(Dir['test/integration/**/*_test.rb']).run + new(Dir['test/integration/**/*_test.rb'], options).run else - new(arguments).run + new(files, options).run end end - # Print out the help message which listed all of the test suite names. - def help_message - puts "Usage: rails test [path to test file(s) or test suite type]" - puts "" - puts "Run single test file, or a test suite, under Rails'" - puts "environment. If the file name(s) or suit name is omitted," - puts "Rails will run all the test suites." - puts "" - puts "Support types of test suites:" - puts "-------------------------------------------------------------" - puts "* models (test/models/**/*)" - puts "* helpers (test/helpers/**/*)" - puts "* units (test/{models,helpers,unit}/**/*" - puts "* controllers (test/controllers/**/*)" - puts "* mailers (test/mailers/**/*)" - puts "* functionals (test/{controllers,mailers,functional}/**/*)" - puts "* integration (test/integration/**/*)" - puts "-------------------------------------------------------------" + # Parse arguments and set them as option flags + def parse_arguments(arguments) + options = {} + orig_arguments = arguments.dup + + OptionParser.new do |opts| + opts.banner = "Usage: rails test [path to test file(s) or test suite type]" + + opts.separator "" + opts.separator "Run single test file, or a test suite, under Rails'" + opts.separator "environment. If the file name(s) or suit name is omitted," + opts.separator "Rails will run all the test suites." + opts.separator "" + opts.separator "Specific options:" + + opts.on '-h', '--help', 'Display this help.' do + puts opts + exit + end + + opts.on '-s', '--seed SEED', Integer, "Sets random seed" do |m| + options[:seed] = m.to_i + end + + opts.on '-v', '--verbose', "Verbose. Show progress processing files." do + options[:verbose] = true + end + + opts.on '-n', '--name PATTERN', "Filter test names on pattern (e.g. /foo/)" do |a| + options[:filter] = a + end + + opts.separator "" + opts.separator "Support types of test suites:" + opts.separator "-------------------------------------------------------------" + opts.separator "* models (test/models/**/*)" + opts.separator "* helpers (test/helpers/**/*)" + opts.separator "* units (test/{models,helpers,unit}/**/*" + opts.separator "* controllers (test/controllers/**/*)" + opts.separator "* mailers (test/mailers/**/*)" + opts.separator "* functionals (test/{controllers,mailers,functional}/**/*)" + opts.separator "* integration (test/integration/**/*)" + opts.separator "-------------------------------------------------------------" + + opts.parse! arguments + orig_arguments -= arguments + end + options end end # Create a new +TestRunner+ object with a list of test file paths. - def initialize(files) + def initialize(files, options) @files = files Rake::Task['test:prepare'].invoke + MiniTest::Unit.runner.options = options MiniTest::Unit.output = SilentUntilSyncStream.new(MiniTest::Unit.output) end diff --git a/railties/test/application/test_runner_test.rb b/railties/test/application/test_runner_test.rb index 49bce508ee..249bfd1d5d 100644 --- a/railties/test/application/test_runner_test.rb +++ b/railties/test/application/test_runner_test.rb @@ -149,6 +149,27 @@ module ApplicationTests end end + def test_run_named_test + app_file 'test/unit/chu_2_koi_test.rb', <<-RUBY + require 'test_helper' + + class Chu2KoiTest < ActiveSupport::TestCase + def test_rikka + puts 'Rikka' + end + + def test_sanae + puts 'Sanae' + end + end + RUBY + + run_test_command('test/unit/chu_2_koi_test.rb -n test_rikka').tap do |output| + assert_match /Rikka/, output + assert_no_match /Sanae/, output + end + end + private def run_test_command(arguments = 'test/unit/test_test.rb') Dir.chdir(app_path) { `bundle exec rails test #{arguments}` } |