【问题标题】:devtools::test() fails: Dependency package X not availabledevtools::test() 失败:依赖包 X 不可用
【发布时间】:2018-07-23 18:45:07
【问题描述】:

相关问题:

我有两个自制包,ABB 的某些功能依赖于 A,并且在其 DESCRIPTION 文件中有 A,如下所示:

Depends: A

我有使用 testthat 编写的单元测试。加载 B 正常工作,手动运行测试(运行代码作为一个块)工作正常。但是,尝试通过 devtools::test() 使用自动化测试失败:

>devtools::test()
Loading B
Error in (function (dep_name, dep_ver = NA, dep_compare = NA)  : 
  Dependency package A not available.

我不知道如何开始调试它,因为它在自己的环境等中运行,所以我什至无法打印任何东西。我怀疑是.libPaths() 问题,但无法确认。

我不知道如何最小化重现问题,并且我无法共享代码,因为它是专有的。

traceback()电话:

> traceback()
6: stop("Dependency package ", dep_name, " not available.")
5: (function (dep_name, dep_ver = NA, dep_compare = NA) 
   {
       if (!requireNamespace(dep_name, quietly = TRUE)) {
           stop("Dependency package ", dep_name, " not available.")
       }
       if (xor(is.na(dep_ver), is.na(dep_compare))) {
           stop("dep_ver and dep_compare must be both NA or both non-NA")
       }
       else if (!is.na(dep_ver) && !is.na(dep_compare)) {
           compare <- match.fun(dep_compare)
           if (!compare(as.numeric_version(getNamespaceVersion(dep_name)), 
               as.numeric_version(dep_ver))) {
               warning("Need ", dep_name, " ", dep_compare, " ", 
                   dep_ver, " but loaded version is ", getNamespaceVersion(dep_name))
           }
       }
       return(TRUE)
   })(dots[[1L]][[5L]], dots[[2L]][[5L]], dots[[3L]][[5L]])
4: mapply(check_dep_version, deps$name, deps$version, deps$compare)
3: load_depends(pkg)
2: load_all(pkg, quiet = TRUE)
1: devtools::test()

sessionInfo():

> sessionInfo()
R version 3.4.4 (2018-03-15)
Platform: x86_64-pc-linux-gnu (64-bit)
Running under: Linux Mint 18.2

Matrix products: default
BLAS: /usr/lib/libblas/libblas.so.3.6.0
LAPACK: /usr/lib/lapack/liblapack.so.3.6.0

locale:
 [1] LC_CTYPE=en_US.UTF-8       LC_NUMERIC=C               LC_TIME=en_US.UTF-8        LC_COLLATE=en_US.UTF-8     LC_MONETARY=en_US.UTF-8   
 [6] LC_MESSAGES=en_US.UTF-8    LC_PAPER=en_US.UTF-8       LC_NAME=C                  LC_ADDRESS=C               LC_TELEPHONE=C            
[11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C       

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

loaded via a namespace (and not attached):
 [1] Rcpp_0.12.17                          bindr_0.1.1                           xml2_1.2.0                           
 [4] magrittr_1.5                          roxygen2_6.0.1                        devtools_1.13.6                      
 [7] tidyselect_0.2.4                      R6_2.2.2                              rlang_0.2.1                          
[10] stringr_1.3.1                         plyr_1.8.4                            dplyr_0.7.6                          
[13] tools_3.4.4                           B_1.0                                 withr_2.1.2                          
[16] commonmark_1.5                        digest_0.6.15                         assertthat_0.2.0                     
[19] tibble_1.4.2                          bindrcpp_0.2.2                        purrr_0.2.5                          
[22] testthat_2.0.0                        memoise_1.1.0                         glue_1.3.0                           
[25] stringi_1.2.3                         compiler_3.4.4                        pillar_1.2.3                         
[28] pkgconfig_2.0.1            

【问题讨论】:

    标签: r unit-testing devtools testthat


    【解决方案1】:

    可以在devtools::test() 函数上使用debugonce() 来调试这种情况。这允许对测试环境进行交互式调试。

    致电installed.packages() 未发现任何问题,即软件包 AB 安装在正确的路径中。

    使用debugonce(),我从devtools::test() 跟踪到devtools:::load_depends()devtools:::check_dep_version()requireNamespace(),但失败并出现以下错误:

    Loading required namespace: A
    Failed with error:  ‘object 'mutate' not found whilst loading namespace 'A'’
    

    显然,某种隐藏的命名空间错误涉及mutate() 方法。问题是 quiet=TRUErequireNamespace() 已打开,并且不可更改,因此错误消息不会到达用户,将他们发送到错误的路径。

    因此答案与之前的问题I had answered before 相似,只是没有意识到连接。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-11-28
      • 2019-05-08
      • 2018-06-27
      • 2020-02-18
      • 2017-06-10
      • 1970-01-01
      • 2020-10-13
      • 1970-01-01
      相关资源
      最近更新 更多