4

RSpec (2.12.2) に苦労しています。仕様の 1 つでクラスを参照したいが、そのクラスが/libディレクトリのルートにない場合、エラーがスローされます。

no such file to load -- test (LoadError)

私の仕様はフォルダー構造にネストできるようですが、ネストされたフォルダー (たとえばlib/workers/conversion_worker.rb) にあるクラスを要求しようとすると、このエラーが発生します。

すべての仕様で require 'spec_helper' を使用していますが、クラスのパスをハードコーディングしても同じエラーが発生します。

この構造では:

-lib/
  - class_found.rb
  - workers/
     - class_not_found.rb

仕様は次のようになります。

# spec/workers/class_not_found_spec.rb
require "spec_helper"
require "class_not_found"

describe ClassNotFound do    
  it "Does something"
end

以下は、spec を正常に実行します (-I フラグは $LOAD_PATH へのパスを追加します)。

$ rspec spec/workers/class_not_found_spec.rb -I /Path/to/project/*

そのため、RSpec はそのパスに lib の下に何も追加していないようです。

require_relative を使用して、class_not_found.rb を正常に要求できます。

require_relative "../../lib/workers/class_not_found.rb" #Succeeds

ただし、require を使用しない場合:

require "lib/workers/class_not_found.rb" # Fails
4

2 に答える 2

7

ご希望の回答があるかどうかはわかりませんが、ファイルが正しく要求されていないようです。

ファイルにはすべてのライブラリ'lib/class_found.rb'ファイルが必要なので、次のようになります。

require 'workers/class_not_found'

spec_helper.rbフォルダにメインファイルが必要になるため、次のlibようになります。

require 'class_found'

rspec'spec/spec_helper.rb'は、実行時に自動的に読み込まれ、その にフォルダーが自動的に追加されるため、require'lib'が適切に表示され、require されるようになります。LOAD_PATH'lib/class_found.rb'

于 2013-01-25T22:57:33.413 に答える
0

ディレクトリ ツリーによると、ファイルclass_not_found.rbはサブディレクトリにありworkersます。へのパスを追加するのを忘れましたrequire:

require 'workers/class_not_found'

正しいでしょう。

ところで、あなたはrequireクラスではなく、require ファイルです

于 2013-01-24T13:41:11.213 に答える