被 testthat 和skip_on_cran()搞糊涂了

Ben*_*ker 12 r devtools cran testthat

tl;dr我想devtools::test()在一个包上运行并让它跳过测试等,就像它在 CRAN 上运行一样,但我不知道如何操作。

据我了解,testthat::skip_on_cran()检查环境变量NOT_CRAN,如果测试未CRAN 上运行,则应将其设置为“true”值(为了支持这一点,底层测试函数testthat:::on_cran()等于

!identical(Sys.getenv("NOT_CRAN"), "true")
Run Code Online (Sandbox Code Playgroud)

我试图用来skip_on_cran()跳过一些测试。我想确认CRAN 上实际上会跳过这些测试。我有一条线

cat("ON CRAN:", testthat:::on_cran(), "\n")
Run Code Online (Sandbox Code Playgroud)

在我的测试文件中,以便我可以看到 R/testthat认为发生了什么。

如果我使用,环境变量会按照我想要的方式设置(即输出包括ON CRAN: FALSE)/测试被正确跳过)

source([testfile], echo = TRUE)
Run Code Online (Sandbox Code Playgroud)

NOT_CRAN(即,无需预先执行任何特殊操作来设置或取消设置环境变量)或

withr::with_envvar(c(NOT_CRAN = "false"), 
    devtools::test_active_file("tests/testthat/test-bootMer.R"))
Run Code Online (Sandbox Code Playgroud)

(如果我运行时test_active_file()没有包装它,我会得到ON CRAN: FALSE)。

但是,我没有看到devtools::test()以类似的方式运行所有测试(通过)的方法。换句话说,我不知道如何devtools::test()在“ON CRAN”模式下运行。 test()对此没有明确的参数(它有...“传递给包装函数的附加参数”,但我看不到任何相关的向下挖掘),并且使用withr::with_envvar()似乎没有帮助。devtools::check() 确实有一个明确的env_vars参数,但我希望能够运行测试而无需经历整个包检查过程......

抱歉,这不能完全重现;如果需要,我可以尝试构建一个最小的包来显示行为......

pdb*_*pdb 1

不确定您是否仍然有这个问题,但我将此行放在我的第一个测试文件的顶部,它在 R 4.2.1 中有效。

Sys.setenv(NOT_CRAN='skip')
Run Code Online (Sandbox Code Playgroud)