diff options
author | Yves Senn <yves.senn@gmail.com> | 2014-12-30 10:17:30 +0100 |
---|---|---|
committer | Yves Senn <yves.senn@gmail.com> | 2015-03-18 09:52:16 +0100 |
commit | c5532e06d9ef8b75f7443019aa1f34a3b697efdc (patch) | |
tree | 517dce6fb5c8e01ca9178388b41dfc21fa0b3543 /railties/lib/rails | |
parent | fb646969a24be3ec4506515ea89e19ca577a4c40 (diff) | |
download | rails-c5532e06d9ef8b75f7443019aa1f34a3b697efdc.tar.gz rails-c5532e06d9ef8b75f7443019aa1f34a3b697efdc.tar.bz2 rails-c5532e06d9ef8b75f7443019aa1f34a3b697efdc.zip |
spike of a `OptionParser` backed test runner.
Diffstat (limited to 'railties/lib/rails')
-rw-r--r-- | railties/lib/rails/commands.rb | 3 | ||||
-rw-r--r-- | railties/lib/rails/commands/commands_tasks.rb | 7 | ||||
-rw-r--r-- | railties/lib/rails/commands/test.rb | 9 | ||||
-rw-r--r-- | railties/lib/rails/test_unit/runner.rb | 83 |
4 files changed, 100 insertions, 2 deletions
diff --git a/railties/lib/rails/commands.rb b/railties/lib/rails/commands.rb index f32bf772a5..12bd73db24 100644 --- a/railties/lib/rails/commands.rb +++ b/railties/lib/rails/commands.rb @@ -6,7 +6,8 @@ aliases = { "c" => "console", "s" => "server", "db" => "dbconsole", - "r" => "runner" + "r" => "runner", + "t" => "test", } command = ARGV.shift diff --git a/railties/lib/rails/commands/commands_tasks.rb b/railties/lib/rails/commands/commands_tasks.rb index 8bae08e44e..d8d4080c3e 100644 --- a/railties/lib/rails/commands/commands_tasks.rb +++ b/railties/lib/rails/commands/commands_tasks.rb @@ -14,6 +14,7 @@ The most common rails commands are: generate Generate new code (short-cut alias: "g") console Start the Rails console (short-cut alias: "c") server Start the Rails server (short-cut alias: "s") + test Run tests (short-cut alias: "t") dbconsole Start a console for the database specified in config/database.yml (short-cut alias: "db") new Create a new Rails application. "rails new my_app" creates a @@ -27,7 +28,7 @@ In addition to those, there are: All commands can be run with -h (or --help) for more information. EOT - COMMAND_WHITELIST = %w(plugin generate destroy console server dbconsole runner new version help) + COMMAND_WHITELIST = %w(plugin generate destroy console server dbconsole runner new version help test) def initialize(argv) @argv = argv @@ -81,6 +82,10 @@ EOT end end + def test + require_command!("test") + end + def dbconsole require_command!("dbconsole") Rails::DBConsole.start diff --git a/railties/lib/rails/commands/test.rb b/railties/lib/rails/commands/test.rb new file mode 100644 index 0000000000..f75b07cf73 --- /dev/null +++ b/railties/lib/rails/commands/test.rb @@ -0,0 +1,9 @@ +ENV["RAILS_ENV"] = "test" + +require "rails/test_unit/runner" +options = Rails::TestRunner::Options.parse(ARGV) + +$: << File.expand_path("../../test", APP_PATH) + +# Config Rails backtrace in tests. +Rails::TestRunner.new(options).run diff --git a/railties/lib/rails/test_unit/runner.rb b/railties/lib/rails/test_unit/runner.rb new file mode 100644 index 0000000000..25f30f6b80 --- /dev/null +++ b/railties/lib/rails/test_unit/runner.rb @@ -0,0 +1,83 @@ +require "ostruct" +require "optparse" +require "rake/file_list" + +module Rails + class TestRunner + class Options + def self.parse(args) + options = { backtrace: false, name: nil } + + opt_parser = ::OptionParser.new do |opts| + opts.banner = "Usage: bin/rails test [options]" + + opts.separator "" + opts.separator "Filter options:" + + opts.on("-n", "--name [NAME]", + "Only run tests matching NAME") do |name| + options[:name] = name + end + + opts.separator "" + opts.separator "Output options:" + + opts.on("-b", "--backtrace", + "show the complte backtrace") do + options[:backtrace] = true + end + + opts.separator "" + opts.separator "Common options:" + + opts.on_tail("-h", "--help", "Show this message") do + puts opts + exit + end + end + + opt_parser.order!(args) + options[:pattern] = ARGV.shift + options + end + end + + def initialize(options = {}) + @options = options + end + + def run + enable_backtrace if @options[:backtrace] + filter_tests_by_name if @options[:name] + + run_tests + end + + private + def run_tests + test_files.to_a.each do |file| + require File.expand_path file + end + end + + NAMED_PATTERNS = { + "models" => "test/models/**/*_test.rb" + } + def test_files + if @options[:pattern] + pattern = NAMED_PATTERNS[@options[:pattern]] + else + pattern = "test/**/*_test.rb" + end + Rake::FileList[pattern] + end + + def enable_backtrace + ENV["BACKTRACE"] = "1" + end + + def filter_tests_by_name + ARGV.push("-n", @options[:name]) + end + end +end |