Вопрос

Я пишу тесты для функции, в которой при некоторых условиях будут генерировать предупреждения.Я хочу убедиться, что в других условиях он не дает предупреждений.Я не вижу очевидного способа легко проверить это с testthat.Я думаю, что я мог сделать что-то вроде:

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

или использовать options(warn=2), но я надеялся, что будет что-то вроде:

expect_no_warnings(my.func())
.

Я упускаю что-то очевидное?

Это было полезно?

Решение

В еще более поздних версиях'testthat't'ttps://github.com/hadley/testthat/release/tag/v0.11.0"> 0.11.0 ) вы можетеДелать:

expect_warning(my.func(), regexp = NA)
.

из документации expect_error

Regexp: регулярное выражение для тестирования.Если пропущено, просто утверждает, что код создает некоторую вывод, MessSage, предупреждение или ошибку.Кроме того, вы можете указать Na, чтобы указать, что не должно быть вывода, сообщений, предупреждений или ошибок.

Так же, как только вы можете проверить, что нет сообщений, ошибок и вывода.

Другие советы

В последних версиях testthat вы можете просто сделать:

expect_that(my.func(), not(gives_warning()))
.

Вы можете проверить, не удается ли выйти expect_warning().Следующее решает как вопрос о других видах вывода, создаваемого генеракодицетагкодом, так и генеракодицетагкодом, имеющим устаревшие:

expect_failure(expect_warning(my.func()))
.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top