R包中打印函数的测试覆盖率

Test coverage of print functions in R package

我在 R 包中有一个简单的打印功能:

print.tabyl <- function(x){
  print.data.frame(x, row.names = FALSE)
}

我正在努力实现我的包的完整测试覆盖率,这让我很恼火,因为我未经测试的打印功能将我的测试覆盖率降低到 99%(否则会是 100%)。

但我不知道如何捕获打印函数的输出以便为其编写测试。如何为打印功能编写测试?

根据@alistaire 的建议,我使用 capture.output 编写了一个测试:

test_that("print.tabyl prints without row numbers", {
  expect_equal(
    mtcars %>% tabyl(am, cyl) %>% capture.output(),
    c(" am 4 6  8", "  0 3 4 12", "  1 8 3  2")
  )
})

这捕捉到 row.names 缺失;此结果与 capture.output(print.data.frame(mtcars %>% tabyl(am, cyl))) 不同,后者仍有行号。

使用 capture.output 既测试功能又计入 codecov.io 跟踪的覆盖范围。