Skip to content

Commit

Permalink
Merge pull request #27802 from domcleal/27801-multiple-rake-tests
Browse files Browse the repository at this point in the history
Collect all file patterns when running multiple rake test tasks
  • Loading branch information
kaspth committed Feb 20, 2017
1 parent e79ffaf commit 9b5952c
Show file tree
Hide file tree
Showing 3 changed files with 28 additions and 7 deletions.
6 changes: 6 additions & 0 deletions railties/CHANGELOG.md
@@ -1,3 +1,9 @@
* Fix running multiple tests in one `rake` command

e.g. `bin/rake test:models test:controllers`

*Dominic Cleal*

* Don't generate HTML/ERB templates for scaffold controller with `--api` flag.

Fixes #27591.
Expand Down
14 changes: 7 additions & 7 deletions railties/lib/rails/test_unit/minitest_plugin.rb
Expand Up @@ -54,19 +54,18 @@ def self.plugin_rails_options(opts, options)

options[:color] = true
options[:output_inline] = true
options[:patterns] = defined?(@rake_patterns) ? @rake_patterns : opts.order!
options[:patterns] = opts.order! unless run_via[:rake]
end

# Running several Rake tasks in a single command would trip up the runner,
# as the patterns would also contain the other Rake tasks.
def self.rake_run(patterns) # :nodoc:
@rake_patterns = patterns
run_via[:rake] = true
::Rails::TestRequirer.require_files(patterns)
autorun
end

module RunRespectingRakeTestopts
def run(args = [])
if defined?(@rake_patterns)
if run_via[:rake]
args = Shellwords.split(ENV["TESTOPTS"] || "")
end

Expand All @@ -81,8 +80,9 @@ def run(args = [])
def self.plugin_rails_init(options)
ENV["RAILS_ENV"] = options[:environment] || "test"

# If run via `ruby` we've been passed the files to run directly.
unless run_via[:ruby]
# If run via `ruby` we've been passed the files to run directly, or if run
# via `rake` then they have already been eagerly required.
unless run_via[:ruby] || run_via[:rake]
::Rails::TestRequirer.require_files(options[:patterns])
end

Expand Down
15 changes: 15 additions & 0 deletions railties/test/application/test_runner_test.rb
Expand Up @@ -536,6 +536,21 @@ def test_rake_passes_multiple_TESTOPTS_to_minitest
assert_match "seed=1234", output, "passing TEST= should run selected test"
end

def test_rake_runs_multiple_test_tasks
create_test_file :models, "account"
create_test_file :controllers, "accounts_controller"
output = Dir.chdir(app_path) { `bin/rake test:models test:controllers TESTOPTS='-v'` }
assert_match "AccountTest#test_truth", output
assert_match "AccountsControllerTest#test_truth", output
end

def test_rake_db_and_test_tasks_parses_args_correctly
create_test_file :models, "account"
output = Dir.chdir(app_path) { `bin/rake db:migrate test:models TESTOPTS='-v' && echo ".tables" | rails dbconsole` }
assert_match "AccountTest#test_truth", output
assert_match "ar_internal_metadata", output
end

private
def run_test_command(arguments = 'test/unit/test_test.rb')
Dir.chdir(app_path) { `bin/rails t #{arguments}` }
Expand Down

0 comments on commit 9b5952c

Please sign in to comment.