使用Rake

时间:2017-07-11 13:36:00

标签: ruby-on-rails ruby rake

所以我正在编写一个测试,找到要解析为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中是否有一种方法可以使其更具动态性和可重用性?

2 个答案:

答案 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传递的相对路径来查找请求的特定文件并解析绝对路径