R:测试结果和警告时如何从测试报告中省略测试警告消息

R: How to omit tested warning message from test report when testing for result AND warning

我想在 R 中测试一个函数

  1. returns 正确值
  2. 在计算过程中抛出正确的警告

为此,我创建了一个可重现的示例。 有两个脚本,第一个(例如 test-warning-and-result.R)工作正常并且没有任何错误:

library(testthat)

f <- function(x) {
  if (x < 0) {
    warning("*x* is already negative")
    return(x)
  }
  -x
}

test_that("warning and result", {
  x = f(-1)
  expect_that(x, equals(-1))
  expect_warning(f(-1), "already negative")
})

然而,当我 运行 来自外部脚本的测试时(例如 运行-test.R),它在逻辑上会抛出警告在 "x = f(-1)"

library(testthat)
test_dir(".")

Picture of test results

因为我知道会有一个警告并且正在测试它,所以我正在寻找一种方法来从测试报告中省略 test_that() 中的警告。理想情况下,我不必 运行 函数两次,而是在一次测试中。

如有任何想法,我们将不胜感激

好吧,睡了一晚之后我找到了一个简单的解决方案:

不要将函数结果存储在变量 x 中。将两个测试相互嵌套,expect_warning 在

之外

变化自

test_that("warning and result", {
  x = f(-1)
  expect_that(x, equals(-1))
  expect_warning(f(-1), "already negative")
})

test_that("warning and result", {
  expect_warning(expect_that(f(-1), equals(-1)), "already negative")
})