我正在使用testthat
来测试包含类似于以下内容的文件树的包:
.
├── 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
在test1.r
文件中,我需要使用data/testhaplom.out
文件作为特定功能的输入数据,但如果我test_file(test1.r)
,则会更改为inst/test
目录并看不到数据文件,给出以下错误:
...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
答案 0 :(得分:16)
您的问题有两种解决方案:
您可以使用相对路径(../data/testhaplom.out
):
expect_true(file.exists(file.path("..", "data", "testhaplom.out")))
或者您可以使用system.file
获取数据目录的位置:
expect_true(file.exists(file.path(system.file("data", package="YOUR_R_PACKAGE"), "testhaplom.out")))
我更喜欢第二种解决方案。
BTW:file.path
在每个平台上使用正确的路径分隔符。