DEV: Use parallel-compatible formatter for logging autospec failures

DEV: Use parallel-compatible formatter for logging autospec failures

The old method would cause the parallel processes to overwrite each other. The parallel formatter allows multiple processes to write to the same file.

diff --git a/lib/autospec/formatter.rb b/lib/autospec/formatter.rb
index a5fe09a..1ecd3c8 100644
--- a/lib/autospec/formatter.rb
+++ b/lib/autospec/formatter.rb
@@ -1,4 +1,5 @@
 require "rspec/core/formatters/base_text_formatter"
+require "parallel_tests/rspec/logger_base"
 
 module Autospec; end
 
@@ -43,3 +44,18 @@ class Autospec::Formatter < RSpec::Core::Formatters::BaseTextFormatter
   end
 
 end
+
+class Autospec::ParallelFormatter < ParallelTests::RSpec::LoggerBase
+  RSpec::Core::Formatters.register self, :example_failed
+
+  def message(*args);end
+  def dump_failures(*args);end
+  def dump_summary(*args);end
+  def dump_pending(*args);end
+  def seed(*args);end
+
+  def example_failed(notification)
+    output.puts notification.example.metadata[:location] + " "
+  end
+end
+
diff --git a/lib/autospec/simple_runner.rb b/lib/autospec/simple_runner.rb
index f060683..f8001b9 100644
--- a/lib/autospec/simple_runner.rb
+++ b/lib/autospec/simple_runner.rb
@@ -14,14 +14,18 @@ module Autospec
         self.abort
       end
       # we use our custom rspec formatter
-      args = ["-r", "#{File.dirname(__FILE__)}/formatter.rb",
-        "-f", "Autospec::Formatter"]
+      args = ["-r", "#{File.dirname(__FILE__)}/formatter.rb"]
 
       command = begin
         if ENV["PARALLEL_SPEC"] &&
               !specs.split.any? { |s| puts s; s =~ /\:/ } # Parallel spec can't run specific groups
+
+          args += ["-f", "progress", "-f", "Autospec::ParallelFormatter", "-o", "./tmp/rspec_result"]
+          args += ["-f", "ParallelTests::RSpec::RuntimeLogger", "-o", "./tmp/parallel_runtime_rspec.log"] if specs == "spec"
+
           "parallel_rspec -- #{args.join(" ")} -- #{specs.split.join(" ")}"
         else
+          args += ["-f", "Autospec::Formatter"]
           "bin/rspec #{args.join(" ")} #{specs.split.join(" ")}"
         end
       end

GitHub sha: 02ed5e78

1 Like