와 모듈과 서브 클래스와 RSpec에에서 이상하게 동작 I했습니다 추가 한 다음 파일 :
응용 프로그램/모델/baz.rb
lib 디렉토리/발표자/foo_presenter.rb
lib 디렉토리/발표자 /foo_presenter/bar.rb
사양/모델/baz_spec.rb
사양/lib 디렉토리/발표자/foo_presenter/bar_spec.rb 레일 자동 로딩 내 레일 응용 프로그램에서 spork
lib 디렉토리/발표자/foo_presenter.rb의 내용
가 뭔가 같은 : lib 디렉토리/발표자/foo_presenter/bar.rb의개내용은 같다 : 사양/lib 디렉토리/발표자/foo_presenter/bar_spec.rb의
module Presenters
class FooPresenter::Bar
def baz
# do stuff
end
end
end
내용은 같은 것입니다 :
require 'spec_helper'
module Presenters::FooPresenter
describe Bar do
# some tests
end
end
그럼 난 사양/모델/baz_spec.rb의 사양 파일이 : 응용 프로그램/모델의
require 'spec_helper'
describe Baz do
it 'works' do
Presenters::FooPresenter.render
end
end
(내용을/baz.rb이 관련이 없습니다 내가 rspec spec/models/baz_spec.rb
를 실행할 때 문제)
문제는 그것이 spork없이 잘 작동하지만 spork가 실행 중일 때, 내가 좋아하는 오류 얻을 : 나가서 설명하자면 NameError : 정의되지 않은 메서드`발표자에 대한 '렌더링 :: FooPresenter : 모듈
내가 추적을 코드를 통해 rspec이 spec/lib/presenters/foo_presenter/bar_spec.rb를로드하면 Rails가 lib/presenters/foo_presenter/bar.rb를 자동로드하므로 Presenters :: FooPresenter :: Bar가로드됨을 알 수 있습니다. , 그런 다음 baz_spec.rb가 실행될 때 lib/presenters/foo_presenter.rb가로드 된 적이 없으므로 예외가 발생합니다. 그러나 이것은 spork이 실행 중일 때만 발생합니다. 빠른 수정은 config/initializers의 파일에서 require 'foo_presenter'
이었지만 명확한 요구 사항이 필요없는 더 깨끗한 솔루션이 있습니까? 내 추측은 여기서 레일즈가 lib/presenters/foo_presenter.rb를 자동로드하지 않는다는 것입니다. 왜냐하면 Presenters :: FooPresenter가 이미 bar_spec.rb에 의해 정의 되었기 때문입니다.