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)
我正在使用 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)