R: Как пропустить проверенное предупреждающее сообщение из отчета о тестировании при тестировании на результат И предупреждение - PullRequest
1 голос
/ 26 февраля 2020

Я хочу проверить в R, если функция

  1. возвращает правильное значение
  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")
})

Однако, когда я запускаю тесты из внешний скрипт (например, run-test.R ), он логически выдает предупреждение в «x = f (-1)»

library(testthat)
test_dir(".")

Изображение результатов теста

Поскольку я знаю, что будет предупреждение, и проверяю его, я ищу способ пропустить предупреждение в test_that () из отчета о тестировании. В идеале, мне не пришлось бы запускать функцию дважды, но в одном тесте.

Любые идеи приветствуются

1 Ответ

0 голосов
/ 28 февраля 2020

Хорошо, поспав одну ночь, я нашел простое решение:

Не сохраняйте результат функции в переменной x. Вложите два теста друг в друга, с ожидаемым предупреждением вне

Измените с

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")
})
...