Track test coverage for your R package and (optionally) upload the results to coveralls or codecov.
If you are already using Travis-CI add the
following to your project's .travis.yml
to track your coverage results
over time with Coveralls.
r_github_packages:
- jimhester/covr
after_success:
- Rscript -e 'library(covr);coveralls()'
To use a different CI service, you need to specify your secret repo token for
the repository, found at the bottom of your repository's page on Coveralls.
Your after_success
would then look like this:
after_success:
- Rscript -e 'library(covr);coveralls(repo_token = "your_secret_token")'
If you are using the secret repo token it is wise to use a Secure Variable so that it cannot be used maliciously.
Also you will need to turn on coveralls for your project at https://coveralls.io/repos/new.
Alternatively you can track your coverage results using Codecov, which supports a large number of CI systems out of the box
It also supports uploading coverage results directly from your computer.
For all of the cases include the following in your build script.
library(covr);codecov()
Iterative usage of covr
.
A shiny application can also be used to view coverage per line.
cov <- package_coverage()
shine(cov)
# if your working directory is in the packages base directory
package_coverage()
# or a package in another directory
package_coverage("lintr")
# zero_coverage() can be used to see only uncovered lines.
zero_coverage(package_coverage())
covr
tracks test coverage by augmenting a packages function definitions with
counting calls.
The vignette vignettes/how_it_works.Rmd contains a detailed explanation of the technique and the rational behind it.
You can view the vignette from within R
using
vignette("how_it_works", package = "covr")
Covr is compatible with any testing package, it simply executes the code in
tests/
on your package.
If your package has compiled code covr
requires a compiler that generates
Gcov compatible
output. It is known to work with clang versions 3.5
and gcc versions 4.2
.
It should also work with later versions of both those compilers.
It does not work with icc
, Intel's compiler.