19

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

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

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

test_spec.rbファイルのspecを実行するときは、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

4

1 に答える 1

20

あなたはそうしない。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')

注:Ruby 1.9.2では、requireをデフォルトに変更しました:Ruby:require vsrequire_relative-Ruby<1.9.2と>=1.9.2の両方で実行する回避策のベストプラクティス

于 2010-07-15T17:47:17.927 に答える