首页 > 解决方案 > 被 testthat 和 skip_on_cran() 弄糊涂了

问题描述

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

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

!identical(Sys.getenv("NOT_CRAN"), "true")

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

cat("ON CRAN:", testthat:::on_cran(), "\n")

在我的测试文件中,以便我可以看到 R/testthat认为正在发生的事情。

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

source([testfile], echo = TRUE)

(即,事先没有做任何特殊的设置或取消设置NOT_CRAN环境变量)或

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

(如果我test_active_file()不包装就跑,我会得到ON CRAN: FALSE)。

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

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

标签: rdevtoolscrantestthat

解决方案


推荐阅读