所以我正在编写一个测试,找到要解析为Ruby的JSON gem的特定文件metadata.json
,以便使用RSpec进行测试。我的目录层次结构如下所示:
|_tests
- metadata.json
- Rakefile
- Gemfile
|_specs
-tagging_specs
代码是在相对路径中传递的简单文件,因此:
print "Getting values from metadata.json file"
#Path to metadata.json file
metadata = File.read('../metadata.json')
values = JSON.parse(metadata)
使用rspec命令直接调用时效果很好。但是当我计划进行多项测试时,我选择使用Rake来管理我的规格。因为这样做我得到一个错误,并且必须传递一个完整的目录路径,例如home/work/projects/tests/metadata.json
我得到的错误信息是使用../metadata.json和Rake是:
Failure/Error: metadata = File.read('../metadata.json')
Errno::ENOENT:
No such file or directory @ rb_sysopen - ../metadata.json
./spec_tests/tagging_standards_spec.rb:7:in 'read'
./spec_tests/tagging_standards_spec.rb:7:in 'block in <top (required)>'
./spec_tests/tagging_standards_spec.rb:3:in '<top (required)>'
No examples found.
Finished in 0.00072 seconds (files took 0.17953 seconds to load)
0 examples, 0 failures, 1 error occurred outside of examples
如果只是我使用这些测试,那么这就是一个问题。然而,它们意味着为其他人提供工作的基础,因此他们的目录路径当然会有所不同。那么在Ruby或Rake中是否有一种方法可以使其更具动态性和可重用性?
答案 0 :(得分:1)
__ dir_方法返回您当前所在文件的目录,因此这应该对您有用:
sums: Vec<i64>
答案 1 :(得分:1)
另外要获得&#34;完整路径&#34;你可以使用File::expand_path
将路径名转换为绝对路径名。除非给出dir_string,否则从进程的当前工作目录引用相对路径,在这种情况下,它将用作起始点。给定的路径名可以以“〜”开头,它扩展到进程所有者的主目录(必须正确设置环境变量HOME)。 “~user”扩展到指定用户的主目录。
例如:
File.expand_path('../metadata.json',__FILE__)
这里它将首先解析__FILE__
的父目录,该目录是调用它的当前文件,例如Rakefile
然后它将使用作为../metadata.json
传递的相对路径来查找请求的特定文件并解析绝对路径