Тесты пакета R не найдены при выполнении проверки R CMD

Я использую пакет testthat для написания тестов для моего пакета R. Я следовал инструкциям на странице http://r-pkgs.had.co.nz/tests.html (по-моему). я использовал

devtools::use_testthat()

для настройки скелета тестирования. Я создал тестовый файл в tests/testthat, и имя файла начинается с test. Когда я запускаю devtools::test() или Ctrl+Shift+T в RStudio, тесты выполняются успешно, однако когда я запускаю R CMD check или Ctrl+Shift+E, testthat не может найти мой пакет. я получаю ошибку

> library(testthat)
> 
> test_check("foo")
Loading required package: foo
Error in loadNamespace(name) : there is no package called 'foo'
Calls: test_check ... tryCatch -> tryCatchList -> tryCatchOne -> <Anonymous>
In addition: Warning message:
In library(package, lib.loc = lib.loc, character.only = TRUE, logical.return = TRUE,  :
  there is no package called 'foo'
Execution halted

Я изменяю путь к своей библиотеке, устанавливая R_LIBS_SITE в файле .Renviron. Я подозреваю, что это не читается при запуске R CMD check, но я не думаю, что это должно иметь значение.

Когда я запускаю devtools::check() из консоли RStudio, он успешно завершается (включая тесты), однако при запуске Check in RStudio происходит сбой.

Я добавил некоторую отладку в testthat.R, чтобы распечатать .libPaths() и другие биты:

> library(testthat)
> .libPaths()
[1] "C:/Users/timk/AppData/Local/Temp/Rtmp841w0b/RLIBS_1790551706"
[2] "C:/Program Files/R/R-3.2.2/library"
> list.files(.libPaths()[1])
 [1] "KernSmooth" "MASS"       "Matrix"     "boot"       "class"
 [6] "cluster"    "crayon"     "digest"     "foo"        "foreign"
[11] "lattice"    "magrittr"   "memoise"    "mgcv"       "nlme"
[16] "nnet"       "praise"     "rpart"      "spatial"    "stringi"
[21] "stringr"    "survival"   "testthat"
> list.files(file.path(.libPaths()[1], "foo"))
character(0)
> list.files(file.path(.libPaths()[1], "testthat"))
 [1] "CITATION"    "DESCRIPTION" "INDEX"       "LICENSE"     "MD5"
 [6] "Meta"        "NAMESPACE"   "R"           "help"        "html"
[11] "libs"

Вы можете видеть, что каталог пакета создан во временной библиотеке, однако пакет пуст. Сравните его со списком файлов для testthat.

Я также пытался загрузить другой пакет, использующий testthat (анонимайзер), и получаю ту же ошибку.

sessionInfo():

R version 3.2.2 (2015-08-14)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows 8 x64 (build 9200)

locale:
[1] LC_COLLATE=English_Australia.1252  LC_CTYPE=English_Australia.1252    LC_MONETARY=English_Australia.1252
[4] LC_NUMERIC=C                       LC_TIME=English_Australia.1252    

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

other attached packages:
 [1] foo_0.1  testthat_0.11.0

loaded via a namespace (and not attached):
 [1] magrittr_1.5   tools_3.2.2    roxygen2_5.0.0 Rcpp_0.12.1    crayon_1.3.1   memoise_0.2.1  stringi_1.0-1 
 [8] stringr_1.0.0  digest_0.6.8   devtools_1.9.1

person Tim Keighley    schedule 20.11.2015    source источник
comment
Несколько дней назад я проверял ветку adegenet, и все пошло прахом. После добавления R_LIBS_USER к пути пользовательской среды все пошло на лад. Что говорит ваш .libPaths()?   -  person Roman Luštrik    schedule 20.11.2015
comment
Хороший вопрос. Я добавил вывод, чтобы показать .libPaths() и содержимое временной библиотеки. Каталог пакетов создается, но он пуст.   -  person Tim Keighley    schedule 23.11.2015
comment
Пробовали ли вы добавить R_LIB_USER в пользовательскую среду или удалить первую (временную) папку?   -  person Roman Luštrik    schedule 23.11.2015
comment
Я попытался добавить R_LIBS_USER и R_LIBS_SITE, но ни один из них не прошел проверку. Я думаю, что самое странное, что если я вызываю devtools::check() из консоли, он работает (включая запуск тестов), однако, если я использую пакет проверки RStudio, это не так. Я не вижу разницы между этими вызовами.   -  person Tim Keighley    schedule 24.11.2015
comment
привет Тим, 5 лет спустя у меня такая же странная ошибка при проверке моего пакета (после тонны раз он прошел правильно). Любая идея, в чем была проблема?   -  person AleRuete    schedule 20.05.2020
comment
Извините, @AleRuete, я так и не понял, что пошло не так. Это было только на этой конкретной машине. Если я попробовал тот же пакет на другой машине, все было в порядке. Я надеюсь, что вам больше повезет.   -  person Tim Keighley    schedule 21.05.2020
comment
Привет @tim-keighley, да. Кажется, это зависит от пакета и машины. Это произошло, когда я переместил контент в другой репозиторий Github. В любом случае, спасибо, что разместили первоначальный вопрос.   -  person AleRuete    schedule 22.05.2020


Ответы (2)


Попробуйте добавить testthat в поле Suggests: файла DESCRIPTION. R CMD CHECK поместит в область действия только пакеты, упомянутые в этом файле во время проверки.

person Lionel Henry    schedule 22.01.2016
comment
testthat находится в DESCRIPTION. Я думаю, что R может найти testthat, но не может найти мой пакет, но только когда я использую ярлык RStudio. Если я запускаю его вручную, тесты находятся и запускаются. - person Tim Keighley; 01.02.2016
comment
Тогда это, вероятно, ошибка RStudio, которую следует зарегистрировать на их github. - person Lionel Henry; 08.02.2016

Вы, кажется, забыли строку

library(foo)

В вашем тесте этот файл. Если я посмотрю на некоторые известные примеры, они делают это так: способ

person takje    schedule 07.09.2017