Devtools :: test () не работает: пакет зависимостей X недоступен

Связанные вопросы:

У меня есть два самодельных пакета, А и B. B зависит от А для некоторых функций и имеет А в своем файле DESCRIPTION, например:

Depends: A

У меня есть модульные тесты, написанные с использованием проверить это. Загрузка 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            
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
3
0
638
1

Ответы 1

Отладить ситуацию можно с помощью debugonce() на функции devtools::test(). Это позволяет интерактивную отладку среды тестирования.

Обращение к installed.packages() не выявило проблем, т.е. пакеты А и B были установлены по правильному пути.

Используя 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=TRUE - requireNamespace() включен и не может быть изменен, поэтому сообщение об ошибке не доходит до пользователя, отправляя его по неправильному пути.

Таким образом, ответ оказался аналогичен предыдущему вопросу Я ответил раньше, только не реализовано соединение.

Другие вопросы по теме