web-dev-qa-db-ja.com

Ruby 'ファイル'と相対的な場所が必要です

だから私はいくつかのrspecテストを書いています、そして私はRuby理解の欠如に恥ずかしいです。

次のようなファイル構造があります。

  • GUI_Tests/Tests/test_spec.rb
  • GUI_Tests/windows_gui.rb
  • GUI_Tests/upload_tool.rb

test_spec.rbファイルの仕様を実行するときは、upload_toolファイルを次のように含める必要があります。

spec -r ../upload_tool -fs test_spec.rb

次に、upload_toolには次のようにwindows_gui.rbが必要です。

require '../windows_gui'

私の質問は、upload_tool.rbではなくtest_spec.rb(../が必要)に関連してwindows_gui.rbを参照する必要があるのはなぜですか?これは私には間違っていると感じます。テスト仕様のコンテキスト外でupload_tool.rbを使用したいと思います。つまり、毎回requiresを変更する必要があります。

明らかに何かが足りないのですが、テスト仕様に関連して参照しないと、ファイルが見つかりませんというエラーが発生します。

ここで無知で申し訳ありませんが、私は手ぶらでやって来ます。どんな考えでもありがたいです。

BB

19
Bobby B

あなたはしません。 requiresは、現在のディレクトリ(この場合は_GUI_Tests/Tests_)を基準にしています。代わりにこれを行った場合:

_cd ..
spec -r upload_tool -fs Test/test_spec.rb
_

これを使用する必要があります:

_require 'windows_gui' # without '../'
_

この問題を回避する最も一般的な方法は、File.dirname(__FILE__)を使用することです。

_require File.join(File.dirname(__FILE__), '..', 'windows_gui')
_

注:in Ruby 1.9.2 require change it's defaults: Ruby:require vsrequire_relative-両方で実行する回避策のベストプラクティスRuby <1.9 .2および> = 1.9.2

20
Adrian