2013-09-26 5 views
6

Sto usando testthat di testare un pacchetto con un albero di file simile al seguente:R - testthat utilizzando file di dati al di fuori della directory test

. 
    ├── data 
    │   └── testhaplom.out 
    ├── inst 
    │   └── test 
    │    ├── test1.r 
    │    ├── tmp_S7byVksGRI6Q 
    │    │   └── testm.desc 
    │    └── tmp_vBcIkMN1arbn 
    │     ├──testm.bin 
    │     └── testm.desc 
    ├── R 
    │   ├── haplom.r 
    │   └── winIdx.r 
    └── tmp_eUG3Qb0PKuiN 
     └── testhaplom.hap2.desc 

Nel file test1.r, ho bisogno di utilizzare il file data/testhaplom.out come dati di input per una certa funzione, ma se lo faccio test_file(test1.r), cambia nella directory inst/test e non può vedere il file di dati, dando il seguente errore:

...Error in file(file, "rt") : cannot open the connection 
In addition: Warning message: 
In file(file, "rt") : 
    cannot open file 'data/testhaplom.out': No such file or directory 

risposta

11

ci sono due soluzioni per la vostra problema:

Si potrebbe utilizzare il percorso relativo (../data/testhaplom.out):

expect_true(file.exists(file.path("..", "data", "testhaplom.out"))) 

Oppure si potrebbe usare system.file per ottenere la posizione della directory dei dati:

expect_true(file.exists(file.path(system.file("data", package="YOUR_R_PACKAGE"), "testhaplom.out"))) 

io preferisco la seconda soluzione.

BTW: file.path utilizzare il separatore di percorso corretto su ciascuna piattaforma.

Problemi correlati