How we configure Simplecov for our Ruby on Rails projects.

Here’s a step-by-step guide to setting up simplecov with explanations of what each part of the code does:

Step 1: Install the simplecov gem #

Add the following line to your Gemfile:

gem ‘simplecov’ Then run bundle install to install the gem.

Step 2: Create a test helper file #

Create a file called spec_helper.rb or test_helper.rb in your project’s test directory if it does not exist.

Step 3: Require the simplecov gem and start coverage #

In the spec_helper.rb or test_helper.rb file, add the following code to require the simplecov gem and start coverage:

require simplecov
SimpleCov.start 'rails' do
# Configuration options go here
end

The ‘rails’ argument specifies the Rails formatter, which is used to generate coverage reports specific to Rails projects.

Step 4: Configure coverage filters #

Inside the SimpleCov.start block, you can configure coverage filters to exclude certain files or directories from the coverage report. The add_filter method is used to specify these filters. In the given configuration, the following filters are applied:

add_filter %w[
  app/views 
  lib/rails 
  lib/templates
  bin 
  coverage 
  log 
  test 
  vendor 
  node_modules 
  db 
  doc   
  public 
  storage 
  tmp
]

This filter excludes files and directories commonly found in Rails projects that typically don’t contain application code.

Step 5: Add non default groups like Services, Views and View Objects #

You can also group files in the coverage report to provide a better overview of code coverage. In the given configuration, the following groups are specified:

add_group(Carriers, app/carriers)
add_group('Scripts', 'app/scripts')
add_group("Views", "app/views")

These lines create two groups: “Carriers”, “Scripts” and “Views”.

Step 6: Enable coverage for specific features #

The given configuration enables coverage for branches and coverage for eval methods by Kernel#eval:

enable_coverage(:branch)
enable_coverage_for_eval

Enabling coverage for branches allows simplecov to track branch coverage in your code. Enabling coverage for eval methods ensures that code executed via eval is also included in the coverage report.

Step 7: Support distributed parallel executions #

If you’re running tests in parallel (e.g., using a tool like CircleCI or parallel test runners), you can set a custom command name for each job to differentiate them in the coverage report:

parallel_number = [
  ENV['CIRCLE_NODE_INDEX'] || ENV['CI_INDEX'],
  ENV['TEST_ENV_NUMBER'] || ENV['JOB_NUMBER']
].compact.join('_')

if parallel_number.present?
  SimpleCov.command_name "Job #{parallel_number}"
end

This code retrieves the environment variables used by popular parallel testing tools and sets a unique command name for each job.

Step 8: Enable additional formatter (optional) #

If you want to use the Cobertura formatter to generate Cobertura-compatible coverage reports, you can enable it by requiring the simplecov-cobertura gem and setting the formatter:

if ENV[COBERTURA_ENABLED]
  require 'simplecov-cobertura'
  SimpleCov.formatter = SimpleCov::Formatter::CoberturaFormatter
end

This code checks if the COBERTURA_ENABLED environment variable is present and, if so, requires the simplecov-cobertura gem and sets the Cobertura formatter.

That’s it! With these steps, you’ve successfully configured simplecov with the provided configuration. When you run your tests, simplecov will generate coverage reports based on this configuration.

You can find the complete configuration code here . Happy Coding!

Comments