2013-09-26 274 views
6

Tôi đang sử dụng testthat để thử nghiệm một gói với một cây tập tin tương tự như sau:R - testthat sử dụng tệp dữ liệu ngoài thư mục thử nghiệm

. 
    ├── 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 

Trong tập tin test1.r, tôi cần phải sử dụng các tập tin data/testhaplom.out như dữ liệu đầu vào cho một chức năng nhất định, nhưng nếu tôi làm test_file(test1.r), nó thay đổi vào thư mục inst/test và không thể nhìn thấy các tập tin dữ liệu, đưa ra các lỗi dưới đây:

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

Trả lời

11

có hai giải pháp cho bạn vấn đề:

Bạn có thể sử dụng đường dẫn tương đối (../data/testhaplom.out):

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

Hoặc bạn có thể sử dụng system.file để có được vị trí của thư mục dữ liệu:

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

Tôi thích giải pháp thứ hai.

BTW: file.path sử dụng dấu phân cách đường dẫn chính xác trên mỗi nền tảng.