bea*_*ber 19 unit-testing r devtools travis-ci
我正在测试这个 R包.
以下三件事情很好:
devtools::test()devtools::test_file("tests/testthat.R")但是,有以下几点
devtools::check()devtools::build_win()#(请参阅此处的 win-builder输出)产生这个错误:
R CMD检查结果1错误| 0警告| 0注意检查测试...错误运行'testthat.R'在'tests/testthat.R'中运行测试失败.最后13行输出:40:mutate_.data.frame(.,city_pop = ~readr :: parse_number(Population..4),metro_pop = ~readr :: parse_number(Population..5),urban_pop = ~readr :: parse_number(Population..6),Country = ~gsub(",","_",Country))41:mutate(.data,!(!(!dots)))42:mutate.data.frame(.data ,!(!(!dots)))43:as.data.frame(mutate(tbl_df(.data),...))44:mutate(tbl_df(.data),...)45:mutate.tbl_df (tbl_df(.data),...)46:mutate_impl(.data,dots)testthat results ============================ ==================================== OK:34 SKIPPED:0 FAILED:1 1.错误:城市工作(@ test-etl.R#113)错误:测试单元测试失败执行停止
此外,旧版本的Travis-CI作业会抛出错误dplyr并readr丢失,而开发版本的Travis-CI作业会抛出一个无法连接到数据库的错误.(我怀疑这些错误与上述错误无关.)
我已经尝试了所有常用的技巧,我相信代码中实际上没有错误,只有某种环境/ NAMESPACE不匹配,我不明白,不知道如何调试.
有任何想法吗?我正在Ubuntu使用R 3.4.1.
MWE
# shell
git clone git@github.com:beanumber/etl.git
# R
library(devtools)
test()
check()
Run Code Online (Sandbox Code Playgroud)
小智 1
我认为最好的答案(也是我经常使用的答案,尤其是在为其他包或“自用”包编写代码时)是在使用从其他包导入的函数时使用约定 package_name::function() 。
\n\n例如:
\n\nlibrary(dplyr)\nlibrary(plyr)\n\n\ndf <- data.frame(a=rnorm(10), b = c(rep("a",5),rep("b",5)))\ndf %>% group_by(b) %>% summarise(mean_value = mean(a), count = n())\nRun Code Online (Sandbox Code Playgroud)\n\n不会起作用。dplyr::summarise() 将\n(这样做实际上会抛出一个非常有用的警告)。
\n\n总的来说,每次加载库时,您都会收到一条声明,说明包中的哪些函数已在其他地方定义。例如,对于我笔记本电脑上的 dplyr:\n 以下对象从 \xe2\x80\x98package:base\xe2\x80\x99:\n intersect、setdiff、setequal、union 中屏蔽
\n\n如果您查看这些警告,您可以看到哪些函数您不能/不应该再调用。请注意,在上述情况下,基函数“union”现在只能由 base::union 调用,union() 的标准调用将使用 dplyr 函数。换句话说,最近加载的库是“默认”使用的库。
\n\n希望有帮助
\n