diff --git a/railties/CHANGELOG.md b/railties/CHANGELOG.md index 5018d6ceebab418ed13aaba47d9ae228ee2431c1..e08867c9d4b46c3dec2a9b17eb585bdcabb09a2c 100644 --- a/railties/CHANGELOG.md +++ b/railties/CHANGELOG.md @@ -1,3 +1,12 @@ +* Fix minitest rails plugin. + + The custom reporters are added only if needed. + + This will fix conflicts with others plugins. + + *Kevin Robatel* + + ## Rails 5.1.5 (February 14, 2018) ## * Gemfile for new apps: upgrade redis-rb from ~> 3.0 to 4.0. diff --git a/railties/lib/minitest/rails_plugin.rb b/railties/lib/minitest/rails_plugin.rb index 95307905048259a5a9b4c02a46bbf7a61a90ebc2..b893041f3ef67b207d269882c94a182ae6302b8c 100644 --- a/railties/lib/minitest/rails_plugin.rb +++ b/railties/lib/minitest/rails_plugin.rb @@ -38,10 +38,19 @@ def self.plugin_rails_init(options) Minitest.backtrace_filter = ::Rails.backtrace_cleaner if ::Rails.respond_to?(:backtrace_cleaner) end + self.plugin_rails_replace_reporters(reporter, options) + end + + def self.plugin_rails_replace_reporters(minitest_reporter, options) + return unless minitest_reporter.kind_of?(Minitest::CompositeReporter) + # Replace progress reporter for colors. - reporter.reporters.delete_if { |reporter| reporter.kind_of?(SummaryReporter) || reporter.kind_of?(ProgressReporter) } - reporter << SuppressedSummaryReporter.new(options[:io], options) - reporter << ::Rails::TestUnitReporter.new(options[:io], options) + if minitest_reporter.reporters.reject! { |reporter| reporter.kind_of?(SummaryReporter) } != nil + minitest_reporter << SuppressedSummaryReporter.new(options[:io], options) + end + if minitest_reporter.reporters.reject! { |reporter| reporter.kind_of?(ProgressReporter) } != nil + minitest_reporter << ::Rails::TestUnitReporter.new(options[:io], options) + end end # Backwardscompatibility with Rails 5.0 generated plugin test scripts diff --git a/railties/test/minitest/rails_plugin_test.rb b/railties/test/minitest/rails_plugin_test.rb new file mode 100644 index 0000000000000000000000000000000000000000..423e74fc663978e9a6f738f91114777a98a028f9 --- /dev/null +++ b/railties/test/minitest/rails_plugin_test.rb @@ -0,0 +1,38 @@ +# frozen_string_literal: true + +require "abstract_unit" + +class Minitest::RailsPluginTest < ActiveSupport::TestCase + setup do + @options = Minitest.process_args [] + @output = StringIO.new("".encode("UTF-8")) + end + + test "default reporters are replaced" do + reporter = Minitest::CompositeReporter.new + reporter << Minitest::SummaryReporter.new(@output, @options) + reporter << Minitest::ProgressReporter.new(@output, @options) + reporter << Minitest::Reporter.new(@output, @options) + + Minitest::plugin_rails_replace_reporters(reporter, {}) + + assert_equal 3, reporter.reporters.count + assert reporter.reporters.any? { |candidate| candidate.kind_of?(Minitest::SuppressedSummaryReporter) } + assert reporter.reporters.any? { |candidate| candidate.kind_of?(::Rails::TestUnitReporter) } + assert reporter.reporters.any? { |candidate| candidate.kind_of?(Minitest::Reporter) } + end + + test "no custom reporters are added if nothing to replace" do + reporter = Minitest::CompositeReporter.new + + Minitest::plugin_rails_replace_reporters(reporter, {}) + + assert_equal 0, reporter.reporters.count + end + + test "handle the case when reporter is not CompositeReporter" do + reporter = Minitest::Reporter.new + + Minitest::plugin_rails_replace_reporters(reporter, {}) + end +end