2013-01-24 4 views
4

RSpec (2.12.2)은 제게 힘든 시간을줍니다. ,RSpec은 내 Lib 디렉토리의 루트에있는 클래스 만 볼 수 있습니다.

no such file to load -- test (LoadError) 

내 사양이 폴더 구조로 중첩 될 수 있습니다 보인다 : 내 사양 중 하나의 클래스를 참조 할 그 클래스 내 /lib 디렉토리의 루트에없는 경우 오류가 발생합니다 하지만 중첩 된 폴더 (예 : lib/workers/conversion_worker.rb)에있는 클래스를 필요로하는 순간이 오류가 발생합니다.

모든 스펙에 '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 

성공적으로 사양을 실행합니다 (-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 "lib/workers/class_not_found.rb" # Fails 
+0

그래서'spec/lib/workers/class_not_found_spec.rb'라는 파일을 만들고 require 'spec_helper'에 쓰십시오; 모듈 근로자; ClassNotFound를 기술한다. do ... end; 끝 ', rspec이 소스를 찾지 못했습니까? – mdesantis

+0

@ProGNOMmers 질문을 업데이트했습니다. 바라건대 지금은 분명합니다. – Undistraction

+0

귀하의 프로젝트 레일 애플 리케이션입니까? 그렇다면'spec/workers'를'spec/lib/workers '로 옮겨야합니다. – mdesantis

답변

7

아직 답을 얻지 못했지만 파일을 올바르게 요구하지 않는 것 같습니다. 귀하의 'lib/class_found.rb' 파일이 모든 라이브러리 파일을 필요로한다, 그래서 같은 보일 것

: 당신의 lib 폴더에 기본 파일이 필요합니다

require 'workers/class_not_found' 

하고 spec_helper.rb를, 그래서 보일 것 같은 뭔가 :

require 'class_found' 

RSpec에 자동으로 'spec/spec_helper.rb'로드가 실행되면 자동 있도록, 그 LOAD_PATH'lib' 폴더를 추가하여 'lib/class_found.rb'에서 요구되는 사항은 제대로보고 필요합니다.

+0

감사합니다. Raj. 네, 제가 해결했지만, 당신의 대답은 정확합니다. lib가 추가되었지만 lib의 하위 폴더는 그렇지 않으므로 하위 폴더의 모든 항목에는 lib뿐 아니라 파일 이름을 기반으로하는 경로가 필요합니다. 내 멍청한 실수 였어. – Undistraction

0

를 디렉토리 트리, class_not_found.rb 하위 디렉토리 workers에있는 파일에 따르면. 당신은 당신의 require에 경로를 추가하는 것을 잊었다 :

require 'workers/class_not_found' 

이 올 것입니다.

By 덧붙여서 : require 클래스, 너 require파일.

+0

죄송합니다. 잘못된 의미. 경로 추가는 작동하지 않으며, RSpec은 내가 아는 한 경로가없는 파일 이름을 허용해야합니다. – Undistraction

+0

'require'는 RSpec과 아무 관련이 없습니다. 'require'는 루비 핵심 라이브러리의 평범한 루비 메소드입니다. '$ LOAD_PATH'를 검색합니다. 아무것도 더, 아무것도 덜. –

관련 문제