testthis makes unit testing in R more comfortable. It is designed to complement the packages testthat, devtools and usethis.
testthis provides RStudio addins for working with files that contain tests. These can be called like normal R function, but it is also possible to assigned them to hotkeys RStudio (Tools/Modify Keyboard Shortcuts).
test_this(): Reloads the package and runs tests associated with the currently open R script file.open_testfile(): Opens the associated test file in an editor window. If the currently open file already is a test file, it opens the associated file in the/Rdirectory. Can be used to jump back and forth between both.
The associated test file for a file R/foo.R is usually
/tests/testhat/test_foo.R (or test-foo.R). You can modify this
behavior by putting the comment #* @testfile anotherfile anywhere in
R/foo.R.
testthis also provides functions for managing tests in subdirectories of
tests/testthat:
-
use_testdata()places a single R object in thetests/testhat/testdatadirectory. It is analogous tousethis::use_data(), except that it saves the object in the.rdsformat, which is more appropriate for single R objects than.rdaor.Rdata(see?readRDS). -
use_testdata_raw()creates a script-file in the directorytests/testhat/testdata-raw. Thetestdata-rawdirectory should contain all script files used to generate the data intests/testhat/testdata, analogous to the relationship between/dataand/data-rawas recommended by devtools/usethis. -
find_testdata()andread_testdata()are simple helpers to read files saved withuse_testdata(). -
use_test_subdir()andtest_subdir()for putting/running tests in subdirectories oftests/testhat/. These tests will not be run on CRAN or bydevtools::test(). This is useful for tests that take a long time to execute, or that require external resources (web, databases) that may not always be available.test_acceptance(),test_manual()andtest_integration()are presets to run tests in theintegration_tests,acceptance_testsandmanual_testssubdirectories oftest/testthat.
Testthis also provides some simple code analysis tools
test_coverage()lists all functions of package and shows whether they are mentioned in anytest_that()call’s desc argument; e.g. if you have a test file containingtest_that("testing that function foo works", <...>),foo()will show up marked as tested. This can be used as a simple todo list for testing, but does not replace a proper test coverage analyzer like covr.test_index()produces an index of alltest_that()calls. Supports RStudio Markers when run interactively from within RStudio.
For more details see the function reference
# Testthis is on CRAN:
install.packages("testthis")
# You can also install the development version from GitHub:
# install.packages("remotes")
remotes::install_github("s-fleck/testthis")
library(testthis)RStudio addins (can be assigned to hotkeys):
open_testfile()
## The file `tests/testthat/test_myscript.R` does not exist.
## You can create it with testthis::test_skeleton().
test_skeleton()
## * Creating `tests/testthat/test_myscript.R`
open_testfile()
## > Opens `tests/testthat/test_myscript.R`
test_this()
## > Runs tests in `tests/testthat/test_myscript.R`
## > works from the original .R file as well as from the file containing the testsCode analysis:
test_index()test_coverage()
## > Package /data/home/fleck/rpkgs/rotor, Test Coverage: 17.8%
## >
## > exported functions ....................
## > u fun
## > + backup
## > + backup_date
## > + backup_time
## > ...
# 'u' stands for 'unit tests', more columns are possible if you use the
# test_subdir() feature of testthis