Prevent the test framework from being loaded in production mode

The test framework should not be autoloaded in production mode.  Before
this commit, the testing railtie would extend AS::TestCase.  This caused
AS::TestCase to be preloaded regardless of the environment in which we
were running.

This commit just moves the code that adds line filtering support in to
the test command where we actually execute the test runner.  That allows
us to maintain the line runner feature but only load the minimal amount
of code we need.
This commit is contained in:
Aaron Patterson 2016-10-21 11:27:26 -07:00
parent 54a5b99a00
commit 797f1dd63c
No known key found for this signature in database
GPG Key ID: 953170BCB4FFAFC6
3 changed files with 14 additions and 6 deletions

View File

@ -1,5 +1,6 @@
require "rails/command"
require "rails/test_unit/minitest_plugin"
require "rails/test_unit/line_filtering"
module Rails
module Command
@ -11,6 +12,10 @@ module Rails
def perform(*)
$LOAD_PATH << Rails::Command.root.join("test")
# Add test line filtering support for running test by line number
# via the command line.
ActiveSupport::TestCase.extend Rails::LineFiltering
Minitest.run_via[:rails] = true
require "active_support/testing/autorun"

View File

@ -1,5 +1,3 @@
require "rails/test_unit/line_filtering"
if defined?(Rake.application) && Rake.application.top_level_tasks.grep(/^(default$|test(:|$))/).any?
ENV["RAILS_ENV"] ||= "test"
end
@ -13,10 +11,6 @@ module Rails
c.integration_tool :test_unit
end
initializer "test_unit.line_filtering" do
ActiveSupport::TestCase.extend Rails::LineFiltering
end
rake_tasks do
load "rails/test_unit/testing.rake"
end

View File

@ -43,6 +43,15 @@ module ApplicationTests
assert_match "42", Dir.chdir(app_path) { `bin/rails runner "bin/count_users.rb"` }
end
def test_no_minitest_loaded_in_production_mode
app_file "bin/print_features.rb", <<-SCRIPT
p $LOADED_FEATURES.grep(/minitest/)
SCRIPT
assert_match "[]", Dir.chdir(app_path) {
`RAILS_ENV=production bin/rails runner "bin/print_features.rb"`
}
end
def test_should_set_dollar_0_to_file
app_file "bin/dollar0.rb", <<-SCRIPT
puts $0