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 /R
directory. 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 the tests/testhat/testdata
directory. It is analogous to usethis::use_data()
, except that it saves the
object in the .rds
format, which is more appropriate for single R objects
than .rda
or .Rdata
(see ?readRDS
). use_testdata_raw()
creates a script-file in the directory
tests/testhat/testdata-raw
. The testdata-raw
directory should contain all
script files used to generate the data in tests/testhat/testdata
,
analogous to the relationship between /data
and /data-raw
as recommended
by devtools/usethis. find_testdata()
and read_testdata()
are simple helpers to read files
saved with use_testdata()
. use_test_subdir()
and test_subdir()
for putting/running tests in
subdirectories of tests/testhat/
. These tests will not be run on CRAN or
by devtools::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()
and
test_integration()
are presets to run tests in the
integration_tests
, acceptance_tests
and manual_tests
subdirectories of
test/testthat
.
Testthis also provides some simple code analysis tools
test_coverage()
lists all functions of package and shows whether they
are mentioned in any test_that()
call's desc argument; e.g. if you have
a test file containing test_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 all test_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 tests
Code 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
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.