diff options
author | Aaron Patterson <aaron.patterson@gmail.com> | 2015-11-03 17:42:52 -0800 |
---|---|---|
committer | Aaron Patterson <aaron.patterson@gmail.com> | 2015-11-03 17:43:08 -0800 |
commit | 5a0e0e72995472e315738dcea5b5a12d6e3d3489 (patch) | |
tree | bb99bf6d718c0151b6c9bb6a75c669a7d3494cda | |
parent | 491f488f5ac4e50abfbd1a434971e41e48aa2f15 (diff) | |
download | rails-5a0e0e72995472e315738dcea5b5a12d6e3d3489.tar.gz rails-5a0e0e72995472e315738dcea5b5a12d6e3d3489.tar.bz2 rails-5a0e0e72995472e315738dcea5b5a12d6e3d3489.zip |
don't start a new process for every test file
we can just reuse the parent process. We should figure out what files
are commonly required among the test files and try to require them in
the parent so that the require time cost is amortized across the
processes.
-rw-r--r-- | railties/Rakefile | 29 |
1 files changed, 21 insertions, 8 deletions
diff --git a/railties/Rakefile b/railties/Rakefile index cf130a5f14..73d881b318 100644 --- a/railties/Rakefile +++ b/railties/Rakefile @@ -5,20 +5,33 @@ task :default => :test desc "Run all unit tests" task :test => 'test:isolated' +dash_i = [ + 'test', + 'lib', + "#{File.dirname(__FILE__)}/../activesupport/lib", + "#{File.dirname(__FILE__)}/../actionpack/lib", + "#{File.dirname(__FILE__)}/../activemodel/lib" +] + +dash_i.reverse_each do |x| + $:.unshift x unless $:.include? x +end +$-w = true + +require 'bundler/setup' unless defined?(Bundler) +require 'active_support' + namespace :test do task :isolated do dirs = (ENV["TEST_DIR"] || ENV["TEST_DIRS"] || "**").split(",") test_files = dirs.map { |dir| "test/#{dir}/*_test.rb" } Dir[*test_files].each do |file| next true if file.include?("fixtures") - dash_i = [ - 'test', - 'lib', - "#{File.dirname(__FILE__)}/../activesupport/lib", - "#{File.dirname(__FILE__)}/../actionpack/lib", - "#{File.dirname(__FILE__)}/../activemodel/lib" - ] - ruby "-w", "-I#{dash_i.join ':'}", file + puts "#{FileUtils::RUBY} -w -I#{dash_i.join ':'} #{file}" + + # We could run these in parallel, but pretty much all of the + # railties tests already run in parallel, so ¯\_(⊙︿⊙)_/¯ + Process.waitpid fork { ARGV.clear; load file } end end end |