Module: ParallelRSpec::SimpleCov
- Defined in:
- lib/parallel_rspec_simplecov.rb,
lib/parallel_rspec_simplecov/version.rb,
lib/parallel_rspec_simplecov/simplecov.rb
Constant Summary collapse
- VERSION =
"0.3.0"
Class Method Summary collapse
- .collate! ⇒ Object
- .simplecov_enabled? ⇒ Boolean
- .start(profile = nil, formatters: nil, &block) ⇒ Object
Class Method Details
.collate! ⇒ Object
55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 |
# File 'lib/parallel_rspec_simplecov/simplecov.rb', line 55 def self.collate! base_dir = @simplecov_base_dir || ::SimpleCov.coverage_dir # Force the server process's resultset to disk before we glob. SimpleCov's # own at_exit handler will harmlessly re-dump it after collation finishes. ::SimpleCov.result.format! pattern = File.join(base_dir, "rspec_*", ".resultset.json") resultsets = Dir.glob(pattern) if resultsets.empty? warn "[parallel_rspec] no SimpleCov resultsets found under #{pattern}; skipping collation" return end collate_formatter = case (@simplecov_formatters || []).length when 0 then nil when 1 then @simplecov_formatters.first else ::SimpleCov::Formatter::MultiFormatter.new(@simplecov_formatters) end puts "Collating #{resultsets.size} SimpleCov resultset(s)..." ::SimpleCov.collate(resultsets) do coverage_dir base_dir formatter collate_formatter if collate_formatter end rescue => e warn "[parallel_rspec] simplecov collation failed: #{e.class}: #{e.}" end |
.simplecov_enabled? ⇒ Boolean
10 11 12 |
# File 'lib/parallel_rspec_simplecov/simplecov.rb', line 10 def self.simplecov_enabled? @simplecov_enabled end |
.start(profile = nil, formatters: nil, &block) ⇒ Object
14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
# File 'lib/parallel_rspec_simplecov/simplecov.rb', line 14 def self.start(profile = nil, formatters: nil, &block) puts "SimpleCov.start" ::SimpleCov.enable_for_subprocesses true base_dir = ::SimpleCov.coverage_dir force_worker_settings = lambda do # Prevent forked processes races generating the HTML report; each # process just dumps a .resultset.json that the runner collates into # the user's chosen formatter(s) at the end of the run. ::SimpleCov.print_error_status = false ::SimpleCov.formatter ::SimpleCov::Formatter::SimpleFormatter ::SimpleCov.minimum_coverage 0 end start_simplecov = lambda do |command_name, dir| ::SimpleCov.command_name command_name ::SimpleCov.coverage_dir dir ::SimpleCov.start(profile, &block) end ParallelRSpec::Config.after_fork do |worker_number| force_worker_settings.call start_simplecov.call( "RSpec Worker #{worker_number}", File.join(base_dir, "rspec_#{worker_number}"), ) end RSpec.configuration.after(:suite) do ParallelRSpec::SimpleCov.collate! end force_worker_settings.call start_simplecov.call("RSpec Server", File.join(base_dir, "rspec_server")) @simplecov_base_dir = base_dir @simplecov_formatters = formatters @simplecov_enabled = true end |