如何在预期时使用 testthat 使消息和警告静音
How to mute messages and warnings with testthat when they are expected
为了开发一个包,我正在使用testthat
。我想测试我的函数是否发送正确的消息和警告。我想同时测试功能的结果。这就是我尝试这样做的方式:
## R/foo.r
foo <- function() {
message("This is a message")
warning("This is a warning")
"This is a result"
}
我写了这些测试:
## tests/testthat/test-foo.R
test_that("foo works", {
expect_equal(foo(), "This is a result")
expect_message(foo(), "This is a message")
expect_warning(foo(), "This is a warning")
})
但现在当我 运行 测试时,我有这个:
Loading testWarnMess
Testing testWarnMess
v | OK F W S | Context
/ | 0 | foo This is a message
v | 3 2 | foo [0.3 s]
----------------------------------------------------------------------------------------------
Warning (test-foo.R:2:3): foo works
This is a warning
Backtrace:
1. testthat::expect_equal(foo(), "This is a result") test-foo.R:2:2
4. testWarnMess::foo()
Warning (test-foo.R:3:3): foo works
This is a warning
Backtrace:
1. testthat::expect_message(foo(), "This is a message") test-foo.R:3:2
7. testWarnMess::foo()
----------------------------------------------------------------------------------------------
== Results ===================================================================================
Duration: 0.3 s
[ FAIL 0 | WARN 2 | SKIP 0 | PASS 3 ]
This is a message
如何防止在测试结果中看到我预期的消息和警告?
一个很好的方法是使用副词 purrr::quietly
。
test_that("foo works", {
qfoo <- purrr::quietly(foo)
qfoo_call <- qfoo()
expect_equal(qfoo_call$result, "This is a result")
expect_equal(qfoo_call$message, "This is a message")
expect_equal(qfoo_call$warning, "This is a warning")
})
为了开发一个包,我正在使用testthat
。我想测试我的函数是否发送正确的消息和警告。我想同时测试功能的结果。这就是我尝试这样做的方式:
## R/foo.r
foo <- function() {
message("This is a message")
warning("This is a warning")
"This is a result"
}
我写了这些测试:
## tests/testthat/test-foo.R
test_that("foo works", {
expect_equal(foo(), "This is a result")
expect_message(foo(), "This is a message")
expect_warning(foo(), "This is a warning")
})
但现在当我 运行 测试时,我有这个:
Loading testWarnMess
Testing testWarnMess
v | OK F W S | Context
/ | 0 | foo This is a message
v | 3 2 | foo [0.3 s]
----------------------------------------------------------------------------------------------
Warning (test-foo.R:2:3): foo works
This is a warning
Backtrace:
1. testthat::expect_equal(foo(), "This is a result") test-foo.R:2:2
4. testWarnMess::foo()
Warning (test-foo.R:3:3): foo works
This is a warning
Backtrace:
1. testthat::expect_message(foo(), "This is a message") test-foo.R:3:2
7. testWarnMess::foo()
----------------------------------------------------------------------------------------------
== Results ===================================================================================
Duration: 0.3 s
[ FAIL 0 | WARN 2 | SKIP 0 | PASS 3 ]
This is a message
如何防止在测试结果中看到我预期的消息和警告?
一个很好的方法是使用副词 purrr::quietly
。
test_that("foo works", {
qfoo <- purrr::quietly(foo)
qfoo_call <- qfoo()
expect_equal(qfoo_call$result, "This is a result")
expect_equal(qfoo_call$message, "This is a message")
expect_equal(qfoo_call$warning, "This is a warning")
})