keep.source = TRUE 的 R CMD 检查 (devtools:check()) 是否可行?

Is R CMD check (devtools:check()) with keep.source = TRUE possible?

我正在使用 testthat 编写单元测试来检查一些操作,这些操作需要具有 srcref 属性的对象。 srcref 如果在软件包安装/构建期间选项 keep.source 设置为 TRUE.

,则添加属性

如果这些测试需要对象的 srcref 属性,我发现在使用 devtools::check() 时我的所有测试都失败了。当以交互方式执行测试时,即不会发生这种情况,即使用 devtools:test()。我可以做些什么来保留这些测试,运行 它并使用 devtools::check() 让它们通过?我试过 devtools::check(args = "--with-keep.source") 但这个参数不被识别。

我正在使用 rlang::pkg_env("my-package") 获取具有 srcref 属性的对象,因此测试如下所示:

testthat("my example works", {
  expect_true(!is.null(get_srcref_for_some_object(names(rlang::pkg_env("my-package")))))
})

选项 --with-keep.source 适用于 R CMD INSTALL,而非 R CMD check。为确保 check 在安装您的软件包时保留源代码,您需要 运行

R CMD check /path/to/tarball --install-args=--with-keep.source

在 shell 或

devtools::check("path/to/package", args = "--install-args=--with-keep.source")

在 R.

最小可重现示例

pkgname <- "foo"
usethis::create_package(pkgname, rstudio = FALSE, open = FALSE)
setwd(pkgname)
usethis::use_testthat()
text <- "
#' @title A title
#' @description A description.
#' @param a,b Arguments.
#' @examples
#' x <- add(1, 1)
#' @export
add <- function(a, b) a + b
"
cat(text, file = file.path("R", "add.R"))
devtools::document(".")
text <- "
test_that(\"sources kept\", {
  expect_false(is.null(attr(add, \"srcref\")))
})
"
cat(text, file = file.path("tests", "testthat", "test-add.R"))
devtools::check(".")
─  checking tests ...
─  Running ‘testthat.R’ (357ms)
E  Some test files failed
   Running the tests in ‘tests/testthat.R’ failed.
   Last 13 lines of output:
     > library(foo)
     > 
     > test_check("foo")
     [ FAIL 1 | WARN 0 | SKIP 0 | PASS 0 ]
     
     ══ Failed tests ════════════════════════════════════════════════════════════════
     ── Failure (test-add.R:3:3): sources kept ──────────────────────────────────────
     is.null(attr(add, "srcref")) is not FALSE
     
     `actual`:   TRUE 
     `expected`: FALSE
     
     [ FAIL 1 | WARN 0 | SKIP 0 | PASS 0 ]
     Error: Test failures
     Execution halted
devtools::check(".", args = "--install-args=--with-keep.source")
─  checking tests ...
✓  Running ‘testthat.R’

清洁

setwd("..")
unlink(pkgname, recursive = TRUE)