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",
|
||||
"s" => "server",
|
||||
"db" => "dbconsole",
|
||||
"r" => "runner"
|
||||
"r" => "runner",
|
||||
"t" => "test",
|
||||
}
|
||||
|
||||
command = ARGV.shift
|
||||
|
|
|
@ -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
|
||||
|
|
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