我正在尝试对我的包进行一些测试,我需要使用的文件位于数据文件夹中,所以当我尝试在代码中使用它时,我会执行randomFuncName(joinpath(@__DIR__, "src", "data", "etc", "etc"))
,但问题是,由于我在;测试";文件夹(假设我正在运行测试(,它创建了"…/…"的相对路径/test/src/data/"而不仅仅是";src/data";。
关于如何在不使用绝对路径的情况下指定此路径(以便它在CI和其他系统上工作(,有什么想法吗?
我更喜欢使用包的位置,而不是依赖于相对路径。例如,当项目增长时,您可能希望拥有许多测试文件,并将它们移动到子文件夹中。依赖joinpath(@__DIR__, "..","something")
总是意味着您要对运行测试的文件的位置做出一些假设。
因此,我将使用pathof(Module)
:
using PackageName
BASE_FOLDER = dirname(dirname(pathof(PackageName)))
test_file = joinpath(BASE_FOLDER, "data", "file.txt")
当然,这是非常主观的:-(
@__DIR__
取决于您所在的文件,而不是pwd
。所以你可以从src
内部调用f(joinpath(@__DIR__, "foo.jl"))
,从test
内部调用f(joinpath(@__DIR__, "..", "src", "foo.jl"))
。