require 'parallelized_specs/spec_logger_base' module RSpec class ParallelizedSpecs::FailuresFormatter < ParallelizedSpecs::SpecLoggerBase #env_test_number = ENV['TEST_ENV_NUMBER'] #env_test_number = 1 if ENV['TEST_ENV_NUMBER'].nil FILENAME = "#{RAILS_ROOT}/rspec.failures" def example_failed(example, counter, failure) @rerun_examples ||= [] @rerun_examples << failure f = File.new(FILENAME, "a+") f.puts retry_command(example) end def dump_summary(*args) rerun_failed_examples = false @rerun_failures ||= [] @rerun_passes ||= [] @error_count = %x{wc -l "#{FILENAME}"}.match(/\d/).to_s #counts the number of lines in the file if @error_count.to_i > 1 && 10 @output.puts "rerunning #{@error_count} examples again" File.open("#{FILENAME}").each_line do |l| rerun_failed_examples = true @output.puts "#{l} will be ran and marked as a success if it passes" result = %x[bundle exec rake spec #{l}] rerun_status = result.match(/FAILED/).to_s if rerun_status == "FAILED" @output.puts "the example failed again" @rerun_failures << l rerun_status = "" else @output.puts "the example passed and is being marked as a success" @rerun_passes << l rerun_status = "" end end #end file loop end if rerun_failed_examples if @rerun_failures.length > 0 @output.puts "1 or more examples failed on rerun, rspec will mark this build as a failure" else @output.puts "all rerun examples passed, rspec will mark this build as passed" $rerun_success = true Spec::Runner.options.instance_variable_get(:@reporter).instance_variable_get(:@failures).delete_if { |item| item != 'b' } #placeholder delete all failures in array approach end else end end def dump_failures(*args) ; end def dump_failure(*args) ; end def dump_pending(*args) ; end def retry_command(example) spec_file = example_group.location.gsub("\"", "\\\"").match(/spec.*b/).to_s spec_name = example.description "SPEC=#{Dir.pwd}/#{spec_file} SPEC_OPTS='-e \"#{spec_name}\"'" end def close() @output.close if (IO === @output) & (@output != $stdout) end end end