Simplecov is a Ruby code coverage tool. This article documents the integration with a Rails 8 application, with the minitest test framework.


Setup

  1. Include the simplecov gem in Gemfile.

    gem "rails", "~> 8.1"
    gem "minitest", "~> 5"
    gem "simplecov", require: false
    
  2. Install the gem.

    bundle install
    

Integrate

  1. Edit test/test_helper.rb and these codes at the top of the file.

    # frozen_string_literal: true
    
    require "simplecov"
    SimpleCov.start "rails" do
      enable_coverage :branch
      command_name "#{ENV['TEST_SUITE'] || 'unit'}-#{Process.pid}"
      merge_timeout 3600
    end
    
  2. Optionally, you can add filters to exclude certain files. For example, any files with fewer than 5 lines of code are likely scaffolds.

    add_filter do |source_file|
      source_file.lines.count < 5
    end
    
  3. While simplecov already supports default grouping (such as controllers, mailers, models, jobs), you can create new groups as needed. For example, you have a few classes that fall under the providers group, you can do so:

    add_group "Providers", "app/providers"
    

Execute

  1. To combine the full coverage, you can run all the tests together. In the example below, we run both unit testing and system testing.

    bin/rails db:test:prepare && \
      TEST_SUITE=unit bin/rails test && \
      TEST_SUITE=system bin/rails test:system
    
  2. The result can be located in the coverage directory.