Zac*_*ach 9 packages r travis-ci
我们试图将一些单元测试添加到由travis运行的插入符包中,但不是在CRAN上.这样可以节省CRAN上的构建时间,并减少必须安装的依赖项数量来检查我们的软件包,同时让我们在travis上运行更完整的测试套件.
我想我可以使用travis.yml文件中的r_packages:行简单地安装测试要求:
r_packages:
- ROSE
- DMwR
Run Code Online (Sandbox Code Playgroud)
但是,我的NOT_CRAN=TRUE构建仍然失败.(NOT_CRAN = FALSE运行正常,因为跳过有问题的测试)
这真的很奇怪,因为当我查看构建日志时,我看到travis成功安装了我需要的所有软件包:
* installing *source* package ‘ROSE’ ...
** package ‘ROSE’ successfully unpacked and MD5 sums checked
** R
** data
** inst
** preparing package for lazy loading
** help
*** installing help indices
** building package indices
** testing if installed package can be loaded
* DONE (ROSE)
Run Code Online (Sandbox Code Playgroud)
但是当我的测试运行依赖于那些包时,R无法找到它们:
> library(testthat)
> library(caret)
Loading required package: lattice
Loading required package: ggplot2
>
> test_check("caret")
[1] "Reduced dimension to 3 by default. "
1 package is needed for this model and is not installed. (ROSE). Would you like to try to install it now?1. Error: check appropriate sampling calls by name -----------------------------
1: withCallingHandlers(eval(code, new_test_environment), error = capture_calls, message = function(c) invokeRestart("muffleMessage"),
warning = function(c) invokeRestart("muffleWarning"))
2: eval(code, new_test_environment)
3: eval(expr, envir, enclos)
4: caret:::parse_sampling(i) at test_sampling_options.R:14
5: checkInstall(pkgs)
6: stop()
testthat results ================================================================
OK: 62 SKIPPED: 0 FAILED: 1
1. Error: check appropriate sampling calls by name
Error: testthat unit tests failed
Execution halted
Run Code Online (Sandbox Code Playgroud)
(我认为)相关的代码行在插入源代码中:
good <- rep(TRUE, length(pkg))
for(i in seq(along = pkg)){
tested <- try(find.package(pkg[i]), silent = TRUE)
if(class(tested)[1] == "try-error") good[i] <- FALSE
}
Run Code Online (Sandbox Code Playgroud)
为什么find.package函数找不到travis安装的软件包?他们去某个特殊的独立图书馆吗?
另外,另外,如何使我的travis构建更简洁?默认情况下,它们似乎打印了太多信息(例如,它回显了测试和手动运行的所有代码,甚至是没有错误的代码).
jti*_*lly 10
在Travis上测试您的软件包时,R CMD check似乎是在错误的位置查找已安装的软件包.
我创建了一个小测试包来解决这个问题:
使用Travis测试包时R CMD check,.libPaths()包含:
c("/tmp/RtmpnQE1WM/RLIBS_29bd3940b7fa",
"/usr/lib/R/library")
Run Code Online (Sandbox Code Playgroud)
使用Travis测试包时devtools::test(),.libPaths()包含:
c("/usr/local/lib/R/site-library",
"/usr/lib/R/site-library",
"/usr/lib/R/library")
Run Code Online (Sandbox Code Playgroud)
默认情况下,RTravis上的软件包安装在/usr/local/lib/R/site-library(即第一个条目.libPaths())中.显然,R CMD check正在寻找错误的地方.
原则上,我们可以使用--library的参数R CMD check为指向正确的地方,但是当你用--as-cran那么--library默认/usr/lib/R/library.
最简单的解决方案可能是安装所有软件包(特别是"附加"软件包ROSE和DMwR)/usr/lib/R/library.有很多方法可以做到这一点.一种解决方案是添加
sudo mkdir -p /usr/lib/R/library
echo 'R_LIBS=/usr/lib/R/library:/usr/lib/R/site-library/' > ~/.Renviron
sudo chmod 2777 /usr/lib/R/library
Run Code Online (Sandbox Code Playgroud)
到before_install您.travis.yml文件的部分.