Use simplecov in your Rails test suite
A useful way of assessing the effectiveness of your testing is to use the simplecov
gem with your Rails application. It counts the number of times each line of application code is run during your test suite.
Use…
…simplecov
in your tests.
Add to Gemfile
group :test do
gem 'simplecov', require: false
end
And run bundle
in the root directory of your project.
Add to .gitignore
Do not commit generated files in the coverage
directory.
coverage/*
Add to top of spec/spec_helper.rb
or test/test_helper.rb
require 'simplecov'
SimpleCov.start 'rails' do
add_filter '/bin/'
add_filter '/db/'
add_filter '/spec/' # for rspec
add_filter '/test/' # for minitest
end
Add this right at the top of the file. The add_filter
lines means files matching the passed string are excluded from the results.
Then run your tests as normal, you’ll see a message that looks like:
Coverage report generated for RSpec to /PATH_TO_YOUR_APP. 584 / 1068 LOC (54.68%) covered.
But why?
Having an awareness of your level of coverage is useful as an input to understanding the stability of your application and protection against regressions.
Exploring the generated HTML reports (available in coverage/index.html
) is a good way to see if there are areas of your code that are poorly tested.
It’s important to note that measuring your test coverage of your application’s code is a blunt instrument. In fact, aiming for 100% coverage is not a noble aim, or even useful.
Some codebases with 100% test coverage will still have bugs, and some codebases with much lower coverage will not.
Why not?
It could slow your test suite a little. But it’s only, at most, additional seconds in a multiple-minute test suite.
Last updated on October 29th, 2017