From cd73b53cf3f90c4ccd48b6aa8c5721290b9ec8e2 Mon Sep 17 00:00:00 2001 From: Ken Collins Date: Fri, 31 Jan 2020 22:45:28 -0500 Subject: [PATCH] Fixed parallel tests in Rails v6. --- CHANGELOG.md | 4 ++++ gemfiles/rails_v5.1.x.gemfile.lock | 2 +- gemfiles/rails_v5.2.x.gemfile.lock | 2 +- gemfiles/rails_v6.0.x.gemfile.lock | 2 +- lib/minitest-spec-rails/parallelize.rb | 30 ++++++++++++++++++++++++++ lib/minitest-spec-rails/railtie.rb | 1 + lib/minitest-spec-rails/version.rb | 2 +- 7 files changed, 39 insertions(+), 4 deletions(-) create mode 100644 lib/minitest-spec-rails/parallelize.rb diff --git a/CHANGELOG.md b/CHANGELOG.md index fe7aec1..90c5c20 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,7 @@ +## 6.0.2 + +* Fixed parallel tests in Rails v6. + ## 6.0.1 * Changed gemspec to `railties` vs `rails`. Thanks @seuros diff --git a/gemfiles/rails_v5.1.x.gemfile.lock b/gemfiles/rails_v5.1.x.gemfile.lock index bc86346..6f569ea 100644 --- a/gemfiles/rails_v5.1.x.gemfile.lock +++ b/gemfiles/rails_v5.1.x.gemfile.lock @@ -1,7 +1,7 @@ PATH remote: .. specs: - minitest-spec-rails (6.0.1) + minitest-spec-rails (6.0.2) minitest (>= 5.0) railties (>= 4.1) diff --git a/gemfiles/rails_v5.2.x.gemfile.lock b/gemfiles/rails_v5.2.x.gemfile.lock index e92bded..b54bbf7 100644 --- a/gemfiles/rails_v5.2.x.gemfile.lock +++ b/gemfiles/rails_v5.2.x.gemfile.lock @@ -1,7 +1,7 @@ PATH remote: .. specs: - minitest-spec-rails (6.0.1) + minitest-spec-rails (6.0.2) minitest (>= 5.0) railties (>= 4.1) diff --git a/gemfiles/rails_v6.0.x.gemfile.lock b/gemfiles/rails_v6.0.x.gemfile.lock index 75f2634..dc010e1 100644 --- a/gemfiles/rails_v6.0.x.gemfile.lock +++ b/gemfiles/rails_v6.0.x.gemfile.lock @@ -1,7 +1,7 @@ PATH remote: .. specs: - minitest-spec-rails (6.0.1) + minitest-spec-rails (6.0.2) minitest (>= 5.0) railties (>= 4.1) diff --git a/lib/minitest-spec-rails/parallelize.rb b/lib/minitest-spec-rails/parallelize.rb new file mode 100644 index 0000000..e71d9a1 --- /dev/null +++ b/lib/minitest-spec-rails/parallelize.rb @@ -0,0 +1,30 @@ + +# HACK: stolen and altered from https://github.com/blowmage/minitest-rails/pull/218/files +# Which was referenced in https://github.com/metaskills/minitest-spec-rails/issues/94 + +module MiniTestSpecRails + ## + # This module is a placeholder for all the Test classes created using the + # spec DSL. Normally all classes are created but not assigned to a constant. + # This module is where constants will be created for these classes. + module SpecTests #:nodoc: + end +end + +module Kernel #:nodoc: + alias describe_before_minitest_spec_constant_fix describe + private :describe_before_minitest_spec_constant_fix + def describe *args, &block + cls = describe_before_minitest_spec_constant_fix(*args, &block) + cls_const = "Test__#{cls.name.to_s.split(/\W/).reject(&:empty?).join('_'.freeze)}" + if block.source_location + source_path, line_num = block.source_location + source_path = Pathname.new(source_path).relative_path_from(Rails.root).to_s + source_path = source_path.split(/\W/).reject(&:empty?).join("_".freeze) + cls_const += "__#{source_path}__#{line_num}" + end + cls_const += "_1" while MiniTestSpecRails::SpecTests.const_defined? cls_const + MiniTestSpecRails::SpecTests.const_set cls_const, cls + cls + end +end diff --git a/lib/minitest-spec-rails/railtie.rb b/lib/minitest-spec-rails/railtie.rb index 6e1e2d4..0fdbd57 100644 --- a/lib/minitest-spec-rails/railtie.rb +++ b/lib/minitest-spec-rails/railtie.rb @@ -7,6 +7,7 @@ class Railtie < ::Rails::Railtie config.before_initialize do |_app| require 'active_support' require 'minitest-spec-rails/init/active_support' + require 'minitest-spec-rails/parallelize' ActiveSupport.on_load(:action_controller) do require 'minitest-spec-rails/init/action_controller' require 'minitest-spec-rails/init/action_dispatch' diff --git a/lib/minitest-spec-rails/version.rb b/lib/minitest-spec-rails/version.rb index 8173c57..2d01117 100644 --- a/lib/minitest-spec-rails/version.rb +++ b/lib/minitest-spec-rails/version.rb @@ -1,3 +1,3 @@ module MiniTestSpecRails - VERSION = '6.0.1'.freeze + VERSION = '6.0.2'.freeze end