2017-07-11 5 views
0

RSpecを使用してテストするRubyのJSON gemに特定のファイルmetadata.jsonを解析するテストを作成しています。私のディレクトリ階層は次のようになります。Rakeを使用してRubyで解析するファイルパス

|_tests 
    - metadata.json 
    - Rakefile 
    - Gemfile 
    |_specs 
    -tagging_specs 

コードは単純なファイルだったので、相対パスを渡し読み:

直接RSpecのコマンドを使用して呼び出されたときにうまく働いた
print "Getting values from metadata.json file" 
#Path to metadata.json file 
metadata = File.read('../metadata.json') 
values = JSON.parse(metadata) 

。しかし、私は複数のテストを正しく行う予定ですが、私は仕様を管理するためにRakeを使用することを選択しました。これをやっているのでしかし、私はエラーを取得し、完全なディレクトリ・パスを渡す必要がありなどhome/work/projects/tests/metadata.json

私は熊手で../metadata.json使用している場合、取得エラーメッセージは次のとおりです。

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にこれをもっと動的で再利用可能にする方法がありますか?

答えて

1

__dir_方法は、あなたがしている現在のファイルのディレクトリを返しますので、これはあなたのために働く必要があります。

File.read(__dir__ + "/../metadata.json") 
+0

これは完全に機能しました。ありがとうございます – DevLuke

+0

答えをマーク:) – nattfodd

1

またあなたがFile::expand_path

改宗を使用することができ、「フル・パス」を取得します絶対パス名へのパス名。相対パスは、dir_stringが指定されていない限り、プロセスの現在の作業ディレクトリから参照されます。この場合、開始ポイントとして使用されます。指定されたパス名は、プロセス所有者のホームディレクトリ(環境変数HOMEを正しく設定する必要があります)に展開される "〜"で始まることがあります。 "〜user"は指定されたユーザーのホームディレクトリに展開されます。例えば

File.expand_path('../metadata.json',__FILE__) 

ここではそれが最初__FILE__それが例えば呼び出される現在のファイルの親ディレクトリを解決しますRakefileこれは、渡された相対パスを../metadata.jsonとして使用し、要求された特定のファイルを検索して絶対パスを解決します。

関連する問題