# Code coverage analysis automation with Rake Since 0.4.0, RCov features a `Rcov::RcovTask` task for rake which can be used to automate test coverage analysis. Basic usage is as follows:
require 'rcov/rcovtask'
Rcov::RcovTask.new do |t|
t.test_files = FileList['test/test*.rb']
# t.verbose = true # uncomment to see the executed command
end
This will create by default a task named `rcov`, and also a task to remove the output directory where the XHTML report is generated. The latter will be named `clobber_rcov`, and will be added to the main `clobber` target.
## Passing command line options to RCov
You can provide a description, change the name of the generated tasks (the one used to generate the report(s) and the `clobber_` one) and pass options to RCov:
desc "Analyze code coverage of the unit tests."
Rcov::RcovTask.new(:coverage) do |t|
t.test_files = FileList['test/test*.rb']
t.verbose = true
## get a text report on stdout when rake is run:
t.rcov_opts << "--text-report"
## only report files under 80% coverage
t.rcov_opts << "--threshold 80"
end
This will generate a `coverage` task and the associated `clobber_coverage` task to remove the directory the report is dumped to (`coverage` by default). You can specify a different destination directory, which comes handy if you have several `RcovTask`s; the `clobber_*` will take care of removing that directory:
desc "Analyze code coverage for the FileStatistics class."
Rcov::RcovTask.new(:rcov_sourcefile) do |t|
t.test_files = FileList['test/test_FileStatistics.rb']
t.verbose = true
t.rcov_opts << "--test-unit-only"
t.output_dir = "coverage.sourcefile"
end
Rcov::RcovTask.new(:rcov_ccanalyzer) do |t|
t.test_files = FileList['test/test_CodeCoverageAnalyzer.rb']
t.verbose = true
t.rcov_opts << "--test-unit-only"
t.output_dir = "coverage.ccanalyzer"
end
## Options passed through the `rake` command line
You can override the options defined in the RcovTask by passing the new options at the time you invoke rake. The documentation for the `Rcov::RcovTask` explains how this can be done.