mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
spike of a OptionParser
backed test runner.
This commit is contained in:
parent
fb646969a2
commit
c5532e06d9
5 changed files with 121 additions and 2 deletions
|
@ -6,7 +6,8 @@ aliases = {
|
||||||
"c" => "console",
|
"c" => "console",
|
||||||
"s" => "server",
|
"s" => "server",
|
||||||
"db" => "dbconsole",
|
"db" => "dbconsole",
|
||||||
"r" => "runner"
|
"r" => "runner",
|
||||||
|
"t" => "test",
|
||||||
}
|
}
|
||||||
|
|
||||||
command = ARGV.shift
|
command = ARGV.shift
|
||||||
|
|
|
@ -14,6 +14,7 @@ The most common rails commands are:
|
||||||
generate Generate new code (short-cut alias: "g")
|
generate Generate new code (short-cut alias: "g")
|
||||||
console Start the Rails console (short-cut alias: "c")
|
console Start the Rails console (short-cut alias: "c")
|
||||||
server Start the Rails server (short-cut alias: "s")
|
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
|
dbconsole Start a console for the database specified in config/database.yml
|
||||||
(short-cut alias: "db")
|
(short-cut alias: "db")
|
||||||
new Create a new Rails application. "rails new my_app" creates a
|
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.
|
All commands can be run with -h (or --help) for more information.
|
||||||
EOT
|
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)
|
def initialize(argv)
|
||||||
@argv = argv
|
@argv = argv
|
||||||
|
@ -81,6 +82,10 @@ EOT
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test
|
||||||
|
require_command!("test")
|
||||||
|
end
|
||||||
|
|
||||||
def dbconsole
|
def dbconsole
|
||||||
require_command!("dbconsole")
|
require_command!("dbconsole")
|
||||||
Rails::DBConsole.start
|
Rails::DBConsole.start
|
||||||
|
|
9
railties/lib/rails/commands/test.rb
Normal file
9
railties/lib/rails/commands/test.rb
Normal file
|
@ -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
|
83
railties/lib/rails/test_unit/runner.rb
Normal file
83
railties/lib/rails/test_unit/runner.rb
Normal file
|
@ -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
|
21
railties/test/test_unit/runner_test.rb
Normal file
21
railties/test/test_unit/runner_test.rb
Normal file
|
@ -0,0 +1,21 @@
|
||||||
|
require 'abstract_unit'
|
||||||
|
require 'rails/test_unit/runner'
|
||||||
|
|
||||||
|
class TestUnitTestRunnerTest < ActiveSupport::TestCase
|
||||||
|
setup do
|
||||||
|
@options = Rails::TestRunner::Options
|
||||||
|
end
|
||||||
|
|
||||||
|
test "shows the filtered backtrace by default" do
|
||||||
|
options = @options.parse([])
|
||||||
|
assert_not options[:backtrace]
|
||||||
|
end
|
||||||
|
|
||||||
|
test "has --backtrace (-b) option to show the full backtrace" do
|
||||||
|
options = @options.parse(["-b"])
|
||||||
|
assert options[:backtrace]
|
||||||
|
|
||||||
|
options = @options.parse(["--backtrace"])
|
||||||
|
assert options[:backtrace]
|
||||||
|
end
|
||||||
|
end
|
Loading…
Reference in a new issue