I have tests for a package that check functions that may or may not return warnings, for example:
test_that("test", {
expect_true(is.na(log(NA)))
expect_true(is.na(log(-1)))
})
I am not interested in checking weather the warnings appeared. Is there a way how I could tell testthat
to ignore the warnings and not display them when running devtools::test()
?
I know I could pack each function in expect_warning
, or suppressWarnings
, but instead I'd like to do something like
test_that("test", {
ignoreAllTheWarningsInside({
expect_true(is.na(log(NA)))
expect_true(is.na(log(-1)))
})
})
Unfortunately options(warn = -1)
also does not seem to work for this.
Using suppressWarnings()
around your script should do the trick. These examples show where you can use the function within your tests. No need for a custom function as all warnings will be silenced.
testthat::test_that("no suppression", {
testthat::expect_true({
warning()
TRUE
})
})
#> -- Warning (<text>:2:3): no suppression ----------------------------------------
#>
#> Backtrace:
#> 1. testthat::expect_true(...)
#> 2. testthat::quasi_label(enquo(object), label, arg = "object")
#> 3. rlang::eval_bare(expr, quo_get_env(quo))
testthat::test_that("suppress inside", {
testthat::expect_true(
suppressWarnings({
warning()
warning()
TRUE
})
)
})
#> Test passed
testthat::test_that("suppress outside", {
suppressWarnings(
testthat::expect_true({
warning()
warning()
TRUE
})
)
})
#> Test passed
Created on 2021-11-23 by the reprex package (v2.0.1)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With