2015-11-20 21 views
6

Sto utilizzando il pacchetto testthat per scrivere i test per il mio pacchetto R. Ho seguito le istruzioni allo http://r-pkgs.had.co.nz/tests.html (credo). Ho usatoI test del pacchetto R non vengono trovati durante l'esecuzione del controllo R CMD

devtools::use_testthat() 

per impostare lo scheletro di prova. Ho creato un file di prova in tests/testthat e il nome file inizia con test. Quando eseguo devtools::test() o Ctrl + Shift + T in RStudio, i test vengono eseguiti correttamente, tuttavia quando eseguo R CMD check o Ctrl + Shift + E, testthat non riesco a trovare il mio pacchetto. Ottengo l'errore

> 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 

faccio modificare il mio percorso di libreria impostando R_LIBS_SITE nel mio file .Renviron. Sospetto che non venga letto durante l'esecuzione di R CMD check, ma non penso che dovrebbe fare la differenza.

Quando si esegue devtools::check() dalla console di RStudio, questo viene completato correttamente (inclusi i test), tuttavia l'esecuzione di Archiviazione in RStudio non riesce.

ho aggiunto un po 'di debug per testthat.R stampare .libPaths() e altri pezzi:

> 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" 

Si può vedere che la directory del pacchetto viene creata nella libreria temporanea, ma il pacchetto è vuoto. Confrontalo con l'elenco di file per testthat.

Ho anche provato a scaricare un altro pacchetto che utilizza testthat (anonymizer) e sto ottenendo lo stesso errore.

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 
+0

Qualche giorno fa stavo controllando un ramo di "adegenet" e l'inferno si è rotto. Dopo aver aggiunto 'R_LIBS_USER' al percorso dell'ambiente dell'utente, le cose sono state rilevate. Cosa dice il tuo '.libPaths()'? –

+0

Una bella domanda. Ho aggiunto l'output per mostrare '.libPaths()' e il contenuto della libreria temporanea. La directory del pacchetto è in fase di creazione, ma è vuota. –

+0

Hai provato ad aggiungere 'R_LIB_USER' all'ambiente utente o rimuovere la prima (temporanea) cartella? –

risposta

0

Prova ad aggiungere testthat nel campo della Suggests:DESCRIPTION. R CMD CHECK metterà solo nell'ambito dei pacchetti menzionati in quel file durante un controllo.

+0

'testthat' è in' DESCRIPTION'. Penso che R sia in grado di trovare 'testthat' ma non in grado di trovare il mio pacchetto, ma solo quando uso il collegamento RStudio. Se lo eseguo "a mano", i test vengono trovati ed eseguiti. –

+0

Quindi è probabilmente un bug RStudio che dovrebbe essere archiviato sul loro github. – lionel

0

È sembrano dimenticare la linea

library(foo) 

Nel file testthat. Se guardo un po 'di renowned examples, lo fanno in questo modo