是否有像expect_no_warnings()那样的测试?

Bro*_*ieG 22 r testthat

我正在为一个函数编写测试,在某些条件下会产生警告.我想确保在其他条件下它不会产生警告.我没有看到一个明显的方法来轻松测试testthat.我想我可以这样做:

my.result <- 25
my.func <- function() my.result
expect_equal(
  withCallingHandlers(
    my.func(), warning=function() stop("A Warning!")
  ), 
  my.result
)
Run Code Online (Sandbox Code Playgroud)

或使用options(warn=2),但我希望有类似的东西:

expect_no_warnings(my.func())
Run Code Online (Sandbox Code Playgroud)

我错过了一些明显的东西吗

alk*_*989 18

在更新版本的'testthat'(从0.11.0开始),您可以:

expect_warning(my.func(), regexp = NA)
Run Code Online (Sandbox Code Playgroud)

从文档中 expect_error

regexp:正则表达式来测试.如果省略,只断言代码产生一些输出,消息,警告或错误.或者,您可以指定NA以指示不应存在输出,消息,警告或错误.

因此,您可以通过相同的方式测试没有消息,错误和输出.

  • 在testthat 0.11.0中,你也可以使用`expect_silent(...)`,如果你想检查它是否一步发出没有输出,消息或警告. (2认同)

Kar*_*ner 11

在最新版本的testthat中,您可以简单地执行:

expect_that(my.func(), not(gives_warning()))
Run Code Online (Sandbox Code Playgroud)

  • 从test0hat 0.0.0(2015年5月22日)开始,`expect_that(A,func(B))`测试样式被软弃用,而'not()`的文档说明在将来的版本中将删除它.鉴于此,除了设置`options(warning = 2)`之外,还有另外一个答案吗? (2认同)