Skip to content

Commit

Permalink
Merge pull request #1069 from bf4/coverage
Browse files Browse the repository at this point in the history
Add test coverage; account for no artifacts on CI
  • Loading branch information
joaomdmoura committed Sep 6, 2015
2 parents 2375420 + c401722 commit 6799453
Show file tree
Hide file tree
Showing 5 changed files with 126 additions and 0 deletions.
99 changes: 99 additions & 0 deletions .simplecov
Original file line number Diff line number Diff line change
@@ -0,0 +1,99 @@
# https://github.com/colszowka/simplecov#using-simplecov-for-centralized-config
# see https://github.com/colszowka/simplecov/blob/master/lib/simplecov/defaults.rb
# vim: set ft=ruby

## DEFINE VARIABLES
@minimum_coverage = ENV.fetch('COVERAGE_MINIMUM') {
case (defined?(RUBY_ENGINE) && RUBY_ENGINE) || "ruby"
when 'jruby', 'rbx'
96.0
else
98.3
end
}.to_f.round(2)
# rubocop:disable Style/DoubleNegation
ENV['FULL_BUILD'] ||= ENV['CI']
@running_ci = !!(ENV['FULL_BUILD'] =~ /\Atrue\z/i)
@generate_report = @running_ci || !!(ENV['COVERAGE'] =~ /\Atrue\z/i)
@output = STDOUT
# rubocop:enable Style/DoubleNegation

## CONFIGURE SIMPLECOV
SimpleCov.pid = $$ # In case there's any forking

SimpleCov.profiles.define 'app' do
coverage_dir 'coverage'
load_profile 'test_frameworks'

add_group 'Libraries', 'lib'

add_group 'Long files' do |src_file|
src_file.lines.count > 100
end
class MaxLinesFilter < SimpleCov::Filter
def matches?(source_file)
source_file.lines.count < filter_argument
end
end
add_group 'Short files', MaxLinesFilter.new(5)

# Exclude these paths from analysis
add_filter '/config/'
add_filter '/db/'
add_filter 'tasks'
end

## START TRACKING COVERAGE (before activating SimpleCov)
require 'coverage'
Coverage.start

## ADD SOME CUSTOM REPORTING AT EXIT
SimpleCov.at_exit do
header = "#{'*' * 20} SimpleCov Results #{'*' * 20}"
@output.puts
@output.puts header
@output.puts SimpleCov.result.format!
percent = Float(SimpleCov.result.covered_percent)
if percent < @minimum_coverage
@output.puts "Spec coverage was not high enough: "\
"#{percent.round(2)} is < #{@minimum_coverage}%\n"
exit 1 if @generate_report
else
@output.puts "Nice job! Spec coverage (#{percent.round(2)}) "\
"is still at or above #{@minimum_coverage}%\n"
end
@output.puts
@output.puts '*' * header.size
end

## CAPTURE CONFIG IN CLOSURE 'AppCoverage.start'
## to defer running until test/test_helper.rb is loaded.
# rubocop:disable Style/MultilineBlockChain
AppCoverage = Class.new do
def initialize(&block)
@block = block
end

def start
@block.call
end
end.new do
SimpleCov.start 'app'
if @generate_report
if @running_ci
require 'codeclimate-test-reporter'
@output.puts '[COVERAGE] Running with SimpleCov Simple Formatter and CodeClimate Test Reporter'
formatters = [
SimpleCov::Formatter::SimpleFormatter,
CodeClimate::TestReporter::Formatter
]
else
@output.puts '[COVERAGE] Running with SimpleCov HTML Formatter'
formatters = [SimpleCov::Formatter::HTMLFormatter]
end
else
formatters = []
end
SimpleCov.formatters = formatters
end
# rubocop:enable Style/MultilineBlockChain
5 changes: 5 additions & 0 deletions Gemfile
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,11 @@ group :test do
gem 'activerecord'
gem 'sqlite3', platform: :ruby
gem 'activerecord-jdbcsqlite3-adapter', platform: :jruby
gem 'codeclimate-test-reporter', require: false
end

group :test, :development do
gem 'simplecov', '~> 0.10', require: false
end

# Windows does not include zoneinfo files, so bundle the tzinfo-data gem
Expand Down
5 changes: 5 additions & 0 deletions Rakefile
Original file line number Diff line number Diff line change
@@ -1,3 +1,8 @@
begin
require 'simplecov'
rescue LoadError
end

require 'bundler/gem_tasks'

begin
Expand Down
6 changes: 6 additions & 0 deletions test/support/simplecov.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
# https://github.com/colszowka/simplecov/pull/400
# https://github.com/ruby/ruby/blob/trunk/lib/English.rb
unless defined?(English)
# The exception object passed to +raise+.
alias $ERROR_INFO $! # rubocop:disable Style/SpecialGlobalVars
end
11 changes: 11 additions & 0 deletions test/test_helper.rb
Original file line number Diff line number Diff line change
@@ -1,5 +1,16 @@
require 'bundler/setup'

begin
require 'simplecov'
# HACK: till https://github.com/colszowka/simplecov/pull/400 is merged and released.
# Otherwise you may get:
# simplecov-0.10.0/lib/simplecov/defaults.rb:50: warning: global variable `$ERROR_INFO' not initialized
require 'support/simplecov'
AppCoverage.start
rescue LoadError
STDERR.puts 'Running without SimpleCov'
end

require 'timecop'
require 'rails'
require 'action_controller'
Expand Down

0 comments on commit 6799453

Please sign in to comment.