knitr::opts_chunk$set(echo = TRUE)
library(test.assessr)
The test.assessr package checks package structure and test drivers to detect and classify testing configurations.
If it detects a standard testing framework (STF) (i.e. testthat or testit),
it runs a standard testing workflow involving a number of steps:
Step 1
run callr::r_safe which calls covr::package_coverage.
The r_safe function has the parameter error = "error".
This means if package_coverage encounters an error,
then r_safe returns an error to the main testing process.
If Step 1 is successful,
then a unit test data coverage object like this is produced:
Step 1 unit test data coverage object
| R object | field | element 1 | element 2 | value | | -------- | ----- | --------- | --------- | ------| | test_package |pkg_name | | | "test.package.0001" | | | pkg_ver | | | "0.1.0" | | | date_time | | | "2026-03-09 14:27:36.673915" | | | executor | | | "xxxxxxx" | | | sysname | | | "Linux" | | | version | | | "#1 SMP PREEMPT_DYNAMIC Mon Dec 1 05:36:50 UTC 2025" | | | release | | | "6.1.158-180.294.amzn2023.x86_64" | | | machine | | | "x86_64" | | | r_version | | |"4.4.1" | | | test_framework_type | | | standard testing framework | | | total_cov | | | 1 | | | res_cov | name| |"test.package.0001" | | | | coverage | filecoverage | R/myscript.R 100 | | | | | totalcoverage | 100 | | | errors | | |NA | | | notes | | |NA |
Step 2
run setup_covr_env which
tests/testthat,cov_env,cov_env,cov_env,nycflights13 datasets if available, cov_env, andrun create fail reporter to find failing tests
create test reporter to create a reporter for all testsexported functions to test files"FAILED", "ERROR", "SKIPPED"run covr::environment_coverage on remaining test files.
If Step 2 is successful,
then a unit test data coverage object like this is produced:
Step 2 unit test data coverage object
| R object | field | element 1 | element 2 | value | | -------- | ----- | --------- | --------- | ------| | test_package |pkg_name | | | "test.package.0003" | | | pkg_ver | | | "0.1.0" | | | date_time | | | "2026-04-09 10:17:27.71564" | | | executor | | | "xxxxxxx" | | | sysname | | | "Linux" | | | version | | | "#1 SMP PREEMPT_DYNAMIC Mon Dec 1 05:36:50 UTC 2025" | | | release | | | "6.1.158-180.294.amzn2023.x86_64" | | | machine | | | "x86_64" | | | r_version | | |"4.4.1" | | | test_framework_type | | | standard testing framework | | | total_cov | | | 0 | | | res_cov | name| |"test.package.0003" | | | | coverage | filecoverage | num [1(1d)] 0 | | | | | attr(*, "dimnames")=List of 1 chr "myscript.R" | | | | | totalcoverage | 0 | | | errors | | |NA | | | notes | | |NA | | long_summary | file | | | "test-myscript.R#L2_L2" | | | code_script | | | "myscript" | | | context | | | "this works" | | | status | | | "FAILED" | | | n | | | 1 | | | time | | | 0.291 | | test_skip | file | | | "test-myscript.R" | | | code_script | | | "myscript" | | | context | | | "this works" | | | status | | | "FAILED" | | | n | | | 1 | | | time | | | 0.291 | | | expectation: | | | "expect_equal" | | | line1 | | | 2 | | | line2 | | | 2 |
This data object differs from Step 1 data object in that it gives information
about which tests/test blocks were skipped and the status tells the user why
they were skipped.
Step 3
run withr::with_dir which calls covr::package_coverage.
covr::package_coverage has the parameters type = "tests", quiet = TRUE
If Step 3 is successful,
then a unit test data coverage object like this is produced:
Step 3 unit test data coverage object
| R object | field | element 1 | element 2 | value | | -------- | ----- | --------- | --------- | ------| | test_package |pkg_name | | | "dplyr" | | | pkg_ver | | | "1.1.4" | | | date_time | | | "2026-04-09 10:17:27.71564" | | | executor | | | "xxxxxxx" | | | sysname | | | "Linux" | | | version | | | "#1 SMP PREEMPT_DYNAMIC Mon Dec 1 05:36:50 UTC 2025" | | | release | | | "6.1.158-180.294.amzn2023.x86_64" | | | machine | | | "x86_64" | | | r_version | | |"4.4.1" | | | test_framework_type | | | standard testing framework | | | total_cov | | | 0 | | | res_cov | name| |"dplyr" | | | | coverage | filecoverage | num [1:109(1d)] 98.3 76.7 97.5 100 100 ... | | | | | attr(*, "dimnames")=List of 1 [1:109] "across.R" "all-equal.R" "arrange.R" "bind-cols.R" ... | | | | | totalcoverage | 0.907 | | | errors | | |NA | | | notes | | |NA | | long_summary | file | | | [1:3432] "test-across.R#L7_L7" "test-across.R#L14_L14" "test-across.R#L20_L20" "test-across.R#L24_L24" ... | | | code_script | | | [1:3432] "across" "across" "across" "across" ... | | | context | | | [1:3432] "across() works on one column data.frame" "across() does not select grouping variables" "across() corre" | | | status | | | [1:3432] "PASS" "PASS" "PASS" "PASS" ... | | | n | | | [1:3432] 1 1 1 1 1 1 1 1 1 1 ... | | | time | | | [1:3432] 0.041 0.014 0.077 0.077 0.077 ...| | test_skip | file | | | [1:448] "test-across.R" "test-across.R" "test-across.R" "test-across.R" ... | | | code_script | | | [1:448] "across" "across" "across" "across" ... | | | context | | | "across() gives meaningful messages" "across() gives meaningful messages" "across() gives meaningful mes" | | | status | | | [1:448] "FAILED" "FAILED" "FAILED" "FAILED" ... | | | n | | | [1:448] 1 1 1 1 1 1 1 1 1 1 ... | | | time | | | [1:448] 2.03 2.03 2.03 2.03 2.03 ... | | | expectation| | | [1:448] "expect_snapshot" "expect_error" "expect_error" "expect_error" ... | | | line1 | | | [1:448] 209 212 216 222 226 230 234 238 243 244 ... | | | line2 | | | [1:448] 280 215 219 225 229 233 237 241 243 244 ... |
Both Step 2 unit test data coverage object and Step 3 unit test data coverage object give the user
details about the status of the tests FAILED, PASSED and SKIPPED.
They also contain the test block start line (i.e. line1 and line2)
and the expectation type in the expectation column (e.g. expect_snapshot expect_error).
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.