s-fleck/testthis
Make testing even more fun with RStudio addins and more
testthis
testthis makes unit testing in R more comfortable. It is designed to
complement the packages testthat,
devtools and
usethis.
Overview
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 the
tests/testhat/testdatadirectory. 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. Thetestdata-rawdirectory should
contain all script files used to generate the data in
tests/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_tests
andmanual_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
Installation
# 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")
Usage
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