Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add test coverage; account for no artifacts on CI #1069

Merged
merged 2 commits into from
Sep 6, 2015
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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