devtools :: test()有效,但devtools :: check()没有。为什么呢?

时间:2017-09-21 01:35:48

标签: r unit-testing travis-ci devtools

我正在测试this R套餐。

以下三项工作正常:

然而,以下事情

  • devtools::check()
  • devtools::build_win()#(请参阅win-builder输出here

产生此错误:

  

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,!( !(!点)))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,   点)        testthat结果================================================ ================ OK:34 SKIPPED:0 FAILED:1     1.错误:城市工作(@ test-etl.R#113)        错误:测试单元测试失败执行暂停

此外,old release Travis-CI job引发了关于dplyrreadr丢失的错误,development release Travis-CI job引发了无法连接到数据库的错误。 (我怀疑这些错误与上述错误无关。)

我已阅读thisthis以及thisthis,但这些似乎都不是我的问题。

我已经尝试了所有常用的技巧,并且我相信代码中实际上没有错误,只有某种环境/ NAMESPACE不匹配我不喜欢理解并且不知道如何调试。

有什么想法吗?我Ubuntu使用R 3.4.1

MWE

# shell
git clone git@github.com:beanumber/etl.git
# R
library(devtools)
test()
check()

1 个答案:

答案 0 :(得分:1)

我认为最好的答案(也是我经常使用的答案,特别是在为其他人或“自用”软件包编写代码时)是在使用从其他软件包导入的函数时使用约定package_name :: function()。

例如:

library(dplyr)
library(plyr)


df <- data.frame(a=rnorm(10), b = c(rep("a",5),rep("b",5)))
df %>% group_by(b) %>% summarise(mean_value = mean(a), count = n())

是行不通的。 dplyr :: summarise()将 (这样做实际上会引发一个非常有用的警告)。

总体而言,每次加载库时,都会得到一条语句,说明该包中的哪些功能已在其他位置定义。例如。在笔记本电脑上使用dplyr:     下列对象从“ package:base”中被屏蔽:     相交,setdiff,setequal,联合

如果您查看这些警告,则可以看到不能/不应再调用的功能。请注意,在上述情况下,基本函数“ union”现在只能由base :: union调用,对union()的标准调用将使用dplyr函数。换句话说,最近加载的库是“默认”使用的库。

希望有帮助