I have a package that contains a number of functions that are named viz_foo(), viz_bar() and so on.
I want to test that each of these functions produces an object of class gg. This would be simple with two functions, as in:
testthat::test_that("viz_ functions produce a plot", {
testthat::expect_s3_class(viz_foo(), "gg")
testthat::expect_s3_class(viz_bar(), "gg")
})
But in practice I have many functions with this naming convention, and new functions are added all the time by package contributors. I want to make sure that any new functions are tested in this way, without having to explicitly add them to the unit test.
The janky way I had thought to deal with this was:
testthat::test_that("viz_ funcs produce a plot", {
viz_funcs <- ls("package:mypackage", pattern = "viz_")
eval_func <- function(func_name) {
suppressMessages(
eval(str2lang(paste0(func_name, "()")))
)
}
plots <- lapply(viz_funcs, eval_func)
lapply(plots, testthat::expect_s3_class, "gg")
})
This works when running the test with devtools::test() but not in R CMD check.
Is there a way to apply a test to all functions within a package that contain a certain pattern in their name?