How to use Simplecov to find untested code in a Rails project with RSpec and Cucumber
Simplecov is a code coverage tool. This helps you to find out which parts of your application are not tested.
Integrating this in a rails project with rspec, cucumber and parallel_tests is easy.
Add it to your Gemfile and bundleCopy
group :test do gem 'simplecov', require: false end
.simplecovfile in your project root:Copy
SimpleCov.start 'rails' do # any custom configs like groups and filters can be here at a central place enable_coverage :branch # see https://github.com/colszowka/simplecov#branch-coverage-ruby--25 end
Note that we're using a predefined profile called
railswhich will group your models, controllers etc. in different tabs. You can also create your own profiles or use no profile at all.
Optional: Enable "Branch Coverage" by adding
enable_coverage :branchon Ruby 2.5+ projects to make Simplecov check if all possible branches of a condition have been hit.
Require in your
features/support/env.rbfor cucumber (important: require it before anything else, especially rails!):Copy
require 'simplecov' SimpleCov.command_name 'features' + (ENV['TEST_ENV_NUMBER'] || '') # remove the TEST_ENV_NUMBER part if you don't use parallel_tests # ...
Require it in
spec/spec_helper.rbfor rspec (important: require it before anything else, especially rails!)Copy
require 'simplecov' SimpleCov.command_name 'specs' + (ENV['TEST_ENV_NUMBER'] || '') # remove the TEST_ENV_NUMBER part if you don't use parallel_tests # ...
Run your tests (rspec and cucumber)
At the end of the testrun you should see something like
Coverage report generated for features, features2, features3, features4, specs, specs2, specs3, specs4 to /home/<user>/<my-project>/coverage.
coverage/*to your project's
Open the file with your browser:
You should see a table like the one in the documentation.
Sort the table by "lines missed" to find the blind spots