使用 {testthat} 在测试中隐藏 {cli} 消息
Hide {cli} messages in tests with {testthat}
我在我的一个包裹中使用 {cli} 消息。我想在我的测试中隐藏这些消息,因为它们会使测试结果混乱。有办法吗?
我看到 {cli} 有一个 TESTTHAT 环境变量,但我不知道它是否为此目的而存在,我也不知道如何使用它。请注意,我更喜欢易于实施的解决方案,例如测试全局选项。我不想手动编辑我所有的测试或消息。
可重现的例子:
library(testthat)
library(cli)
test_that("addition works", {
cli_alert_info("This message should not appear")
expect_equal(1+1, 2)
})
#> i This message should not appear
#> Test passed
编辑: 我可以创建一个自定义 test_that()
来包装 suppressMessages()
,如下所示:
my_test_that <- function(desc, code) {
test_that(desc, {
suppressMessages({
code
})
})
}
my_test_that("addition works", {
cli_alert_danger("This message should not appear")
expect_equal(1+1, 2)
})
#> Test passed
然后存入tests/testthat/setup.R
。问题是,如果测试失败,它指示 my_test_that()
中的行,而不是实际出现错误的行(因此基本上所有错误和警告都将引用同一行):
my_test_that("addition works", {
cli_alert_danger("This message should not appear")
expect_equal(1+4, 2)
})
-- Failure (.active-rstudio-document:6:5): addition works ----------------------
1 + 4 (`actual`) not equal to 2 (`expected`).
这里错误指的是suppressMessages()
这一行。这使得查找问题的根源变得更加困难。
this Github issue中给出了一个解决方案。将 withr::with_options()
或 withr::local_options()
与 option cli.default_handler = function(...) { }
一起使用似乎有效。
library(testthat)
library(cli)
my_test_that <- function(desc, code) {
withr::with_options(
list(
cli.default_handler = function(...) { },
usethis.quiet = TRUE
),
test_that(desc, {
code
})
)
}
my_test_that("addition works", {
cli_alert_danger("This message should not appear")
expect_equal(1+2, 2)
})
-- Failure (.active-rstudio-document:15:3): addition works ---------------------
1 + 2 not equal to 2.
1/1 mismatches
[1] 3 - 2 == 1
请注意,这将删除所有 cli
消息,因此无法在 my_test_that()
中使用 expect_message()
。
我在我的一个包裹中使用 {cli} 消息。我想在我的测试中隐藏这些消息,因为它们会使测试结果混乱。有办法吗?
我看到 {cli} 有一个 TESTTHAT 环境变量,但我不知道它是否为此目的而存在,我也不知道如何使用它。请注意,我更喜欢易于实施的解决方案,例如测试全局选项。我不想手动编辑我所有的测试或消息。
可重现的例子:
library(testthat)
library(cli)
test_that("addition works", {
cli_alert_info("This message should not appear")
expect_equal(1+1, 2)
})
#> i This message should not appear
#> Test passed
编辑: 我可以创建一个自定义 test_that()
来包装 suppressMessages()
,如下所示:
my_test_that <- function(desc, code) {
test_that(desc, {
suppressMessages({
code
})
})
}
my_test_that("addition works", {
cli_alert_danger("This message should not appear")
expect_equal(1+1, 2)
})
#> Test passed
然后存入tests/testthat/setup.R
。问题是,如果测试失败,它指示 my_test_that()
中的行,而不是实际出现错误的行(因此基本上所有错误和警告都将引用同一行):
my_test_that("addition works", {
cli_alert_danger("This message should not appear")
expect_equal(1+4, 2)
})
-- Failure (.active-rstudio-document:6:5): addition works ----------------------
1 + 4 (`actual`) not equal to 2 (`expected`).
这里错误指的是suppressMessages()
这一行。这使得查找问题的根源变得更加困难。
this Github issue中给出了一个解决方案。将 withr::with_options()
或 withr::local_options()
与 option cli.default_handler = function(...) { }
一起使用似乎有效。
library(testthat)
library(cli)
my_test_that <- function(desc, code) {
withr::with_options(
list(
cli.default_handler = function(...) { },
usethis.quiet = TRUE
),
test_that(desc, {
code
})
)
}
my_test_that("addition works", {
cli_alert_danger("This message should not appear")
expect_equal(1+2, 2)
})
-- Failure (.active-rstudio-document:15:3): addition works ---------------------
1 + 2 not equal to 2.
1/1 mismatches
[1] 3 - 2 == 1
请注意,这将删除所有 cli
消息,因此无法在 my_test_that()
中使用 expect_message()
。