Module: Ace::TestSupport::Coverage
- Defined in:
- lib/ace/test_support/coverage.rb
Class Method Summary collapse
-
.enabled? ⇒ Boolean
Check if coverage is enabled.
-
.print_summary(result = nil) ⇒ Object
Print coverage summary to stdout.
-
.result ⇒ SimpleCov::Result?
Get SimpleCov result.
-
.start(gem_name, options = {}) ⇒ Object
Start SimpleCov with standardized configuration.
Class Method Details
.enabled? ⇒ Boolean
Check if coverage is enabled
105 106 107 |
# File 'lib/ace/test_support/coverage.rb', line 105 def self.enabled? ENV["COVERAGE"] == "1" || ENV["COVERAGE"] == "true" end |
.print_summary(result = nil) ⇒ Object
Print coverage summary to stdout
121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 |
# File 'lib/ace/test_support/coverage.rb', line 121 def self.print_summary(result = nil) result ||= self.result return unless result puts "\n" + "=" * 80 puts "Coverage Summary for #{result.command_name}" puts "=" * 80 puts "\nOverall: #{format("%.2f", result.covered_percent)}% covered" if result.respond_to?(:groups) puts "\nBy Group:" result.groups.each do |name, files| coverage = (files.covered_lines.to_f / files.lines_of_code * 100) puts " #{name.ljust(20)} #{format("%6.2f", coverage)}% (#{files.covered_lines}/#{files.lines_of_code} lines)" end end puts "=" * 80 + "\n" end |
.result ⇒ SimpleCov::Result?
Get SimpleCov result
112 113 114 115 116 |
# File 'lib/ace/test_support/coverage.rb', line 112 def self.result return nil unless defined?(SimpleCov) SimpleCov.result end |
.start(gem_name, options = {}) ⇒ Object
Start SimpleCov with standardized configuration
39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 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 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 |
# File 'lib/ace/test_support/coverage.rb', line 39 def self.start(gem_name, = {}) return unless enabled? require "simplecov" # Default options minimum_coverage = [:minimum_coverage] || ENV.fetch("COVERAGE_MIN", 90).to_i html_report = .fetch(:html_report, true) json_report = .fetch(:json_report, ENV["COVERAGE_JSON"] == "1") SimpleCov.start do # Set coverage directory coverage_dir "coverage" # Enable branch coverage (Ruby 2.5+) enable_coverage :branch if respond_to?(:enable_coverage) # Add standard filters add_filter "/test/" add_filter "/spec/" add_filter "/.bundle/" add_filter "/vendor/" # ATOM architecture groups add_group "Atoms", "lib/#{gem_path(gem_name)}/atoms" add_group "Molecules", "lib/#{gem_path(gem_name)}/molecules" add_group "Organisms", "lib/#{gem_path(gem_name)}/organisms" add_group "Models", "lib/#{gem_path(gem_name)}/models" add_group "Commands", "lib/#{gem_path(gem_name)}/commands" add_group "CLI", "lib/#{gem_path(gem_name)}/cli" # Additional custom groups if [:groups] [:groups].each do |name, pattern| add_group name, pattern end end # Set minimum coverage if minimum_coverage > 0 minimum_coverage minimum_coverage minimum_coverage_by_file 80 # Allow some flexibility per file end # Configure formatters formatters = [] formatters << SimpleCov::Formatter::HTMLFormatter if html_report if json_report require "simplecov-json" formatters << SimpleCov::Formatter::JSONFormatter end SimpleCov.formatters = SimpleCov::Formatter::MultiFormatter.new(formatters) unless formatters.empty? # Track files even with 0% coverage track_files "lib/#{gem_path(gem_name)}/**/*.rb" # Project name for reports project_name gem_name end end |