Skip to content

Instantly share code, notes, and snippets.

@davelooi
Created March 28, 2019 02:55
Show Gist options
  • Save davelooi/e4eb798f138b72cb47a8b482b1dd7d91 to your computer and use it in GitHub Desktop.
Save davelooi/e4eb798f138b72cb47a8b482b1dd7d91 to your computer and use it in GitHub Desktop.
Merging simplecov resultsets
# frozen_string_literal: true
module CoverageMerger
def self.merge(directories:)
require 'json'
require 'simplecov'
# Simplecov generates a report on exit by default
# We are doing this manually with merged resultsets
SimpleCov.at_exit {}
# SimpleCov.filters.clear
coverage_results = []
directories.each do |directory|
puts "Loading #{directory}"
# load json results from coverage folder
file = File.join(directory, '.resultset.json')
file_results = JSON.parse(File.read(file))
# parse results from coverage file to array
file_results.each do |command, data|
result = SimpleCov::Result.from_hash(command => data)
coverage_results << result
end
end
puts 'Merging results'
# merge results from array to results object
merged_results = SimpleCov::ResultMerger.merge_results(*coverage_results)
puts 'Printing merged results'
# output the merged resultset to .resultset.json
SimpleCov::ResultMerger.store_result(merged_results)
# output the total coverage percentage to .last_run.json
SimpleCov.write_last_run(merged_results.covered_percent)
# output the merged results to index.html
merged_results.format!
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment