有没有办法重现devtools::check
使用的环境?
我遇到的问题是我的测试与devtools::test()
一起使用但在devtools::check()
内失败。我的问题是现在,如何找到问题。 check
的报告只打印错误日志的最后几行,我找不到完整的测试报告。
checking tests ... ERROR
Running the tests in ‘tests/testthat.R’ failed.
Last 13 lines of output:
...
我知道check
使用与test
相比不同的环境,但我不知道如何调试这些问题,因为它们根本不可重现。特别是这些测试在几个月前运行,所以不知道在哪里寻找问题。
编辑
实际上我试图找到我的问题并找到了解决方案。但要发布我的解决方案,我必须添加更多细节。
所以我的测试总是失败,因为我测试了markdown脚本,如果它运行没有错误,之后我检查是否正确设置了一些环境变量。这些是我用脚本计算的结果以及我设置的标准设置。因此,如果我在开发后忘记更改某些设置,我想收到警告......
无论如何,由于它是一个降价脚本,我不得不提取代码,我使用knitr: run all chunks in an Rmarkdown document使用knitr::purl
来获取代码并使用sys.source
来执行它
runAllChunks <- function(rmd, envir=globalenv()){
# as found here https://stackoverflow.com/questions/24753969
tempR <- tempfile(tmpdir = '.', fileext = ".R")
on.exit(unlink(tempR))
knitr::purl(rmd, output=tempR, quiet=TRUE)
sys.source(tempR, envir=envir)
}
出于某种原因,这可能会产生错误,因为可能需要几周时间(不确定我最近安装了哪些新软件包...... )。但是由于有一个新的评论,我可以使用knitr::knit
同时执行代码,这按预期工作,现在我的测试不再抱怨了。
所以最后,我不知道问题究竟在哪里,但现在正在发挥作用。
答案 0 :(得分:1)
这是一个带有testthat的known issue。解决方法是将以下内容添加为tests/testthat.R
中的第1行:
Sys.setenv(R_TESTS="")
答案 1 :(得分:1)
我最近遇到了与我的测试中断类似的问题(成功devtools::test()
但未成功devtools::check()
)。我不知道这个解决方案是否必然能解决上述问题,但它应该有助于追踪类似的问题。
在我的情况下,问题最终归结为使用需要Suggests
而不是Imports
/ Depends
中列出的软件包的函数。 In特别是,我的函数名为httr::content()
,当我试图传递as = "parsed"
参数时它就破了。事实证明,as = "parsed"
使用建议的包readr
来读取csv,我需要将其添加到devtools::check()
的依赖项中才能正常工作。
答案 2 :(得分:0)
正如我上面提到的,我将部分代码更改为不再是用户knitr::purl
,而是使用knitr::knit
,这解决了我的问题。
expect_error(f <- runAllChunks('010_main_lfq_analysis.Rmd'), NA)
expect_error(f <- knitr::knit('010_main_lfq_analysis.Rmd', output='jnk.R', quiet=TRUE, envir=globalenv()), NA)
答案 3 :(得分:0)
万一它对别人有帮助,这就是对我有用的
install.packages("testthat", "dplyr", "lubridate", "stringr")
(我包括了我的包裹使用的所有包裹)然后所有测试通过
答案 4 :(得分:0)
在以下情况下也可能发生这种情况:您已经在# This program asks for an input and output file, and uses mult. and add.
# to combine files
def main():
print("This program creates a file of numbers from a")
print("file of numbers.")
infileName = input("What file are the numbers in? ")
outfileName = input("What file should the numbers go in? ")
infile = open(infileName, 'r')
outfile = open(outfileName, 'w')
for line in infile:
nums = line.split()
nums = float()
first = nums[0]
second = nums[-1]
newfirst = (first + second)
newsecond = (first * second)
print(newfirst, newsecond, file=outfile)
infile.close()
outfile.close()
print("Numbers have been written to", outfileName)
main()
中加载了一个库,并且您引用的是该库中没有命名空间绑定的函数。例如,假设您在测试文件中使用了R
中的nnzero()
函数,并且碰巧还已经为Matrix
加载了Matrix
软件包。然后library(Matrix)
将通过,但devtools::test()
将失败。使用devtools::check()
应该可以解决问题。