rdeprecation-warningtestthat

Unit tests for deprecated functions in R package cause warnings during check


I've deprecated several functions in my R package by including a .Deprecated("new_function_name") line at the start of the function. I had full unit test coverage for those deprecated functions. Now those tests produce warnings (because of the deprecation message) and muddy up the results of testthat::test() and devtools::check().

I could just delete the test coverage for deprecated functions, but it seems like as long as users can still call the functions, I should retain test coverage. Is there a way I can keep the tests but avoid the clutter in the result of check()? E.g., tell testthat to count them as passing if the expect_equal() still works, ignoring the deprecation warnings?


Solution

  • This is an old question, but now the 'lifecycle' package offers a good method. The documentation is clear and concise:

    library(testthat)
    
    mytool <- function() {
      deprecate_soft("1.0.0", "mytool()")
      10 * 10
    }
    
    # Forcing the verbosity level is useful for unit testing. You can
    # force errors to test that the function is indeed deprecated:
    test_that("mytool is deprecated", {
      rlang::local_options(lifecycle_verbosity = "error")
      expect_error(mytool(), class = "defunctError")
    })
    
    # Or you can enforce silence to safely test that the function
    # still works:
    test_that("mytool still works", {
      rlang::local_options(lifecycle_verbosity = "quiet")
      expect_equal(mytool(), 100)
    })
    

    You can use tests/testthat/setup.R to set the option globally for the tests.