2014-06-20 6 views
1

오늘 사양에 이상한 문제가 발생했습니다. 특정 dir/file을 지정하지 않고 spec 명령을 실행하면 테스트가 훌륭하게 작동합니다. 그러나, 내가 dir이나 파일을 지정하면 rspec은 rspec을 spring과 함께 사용하는지에 따라 몇 가지 (randomish) 오류를 발생시킵니다. 더 어쨌든 - 어제는 일이 끝나기 전에 모든 것이 잘 작동하고있었습니다. 나는 그때 이후로 아무 것도 건드리지 않았으며, 지금은 어떤 이유로 부러졌다.를 실행하는 동안
undefined local variable or method 'some_url_helper_here'단일 사양 파일을 실행할 수 없습니다.

에서
uninitialized constant FactoryGirl

  • spring stop; spring rspec spec/requests/api/v1/users_spec.rb
    결과에

    • rspec spec/requests/api/v1/users_spec.rb
      결과 : 여기가는 방법이다또는 rspec은 예외없이 잘 작동합니다. 내 사양 파일은 다음과 비슷합니다.

      # spec/requests/api/v1/users_spec.rb 
      
      require 'spec_helper' 
      
      describe 'Users API v1', :type => :request do 
          before do 
          @user = FactoryGirl.create(:user) # that line throws an exception about unitialized constant FactoryGirl 
          end 
      
          # ... 
      end 
      

      여기에 무슨 일이 일어나고 있는지 궁금한가요? 모든 단서에 미리 감사드립니다.

  • 답변

    1

    프로젝트의 require에서 종속성 문제가 제대로 충족되지 않습니다.

    전체적으로 전체 응용 프로그램을 실행하거나 테스트 할 때 모든 것이로드됩니다. 그러나 개별 사양으로로드 된 일부 프로젝트 파일은 올바른 require을 처리하지 않거나 기호를 참조하기에 너무 늦은 잘못된 순서로 처리합니다.

    파일을 처리하고 사양을 개별적으로 실행하고 누락 된 기호를 찾아 해당 라이브러리가 사용되기 전에 require d인지 확인해야합니다. 이런 식으로 올바른 의존성을 파악한 후에는 공통된 것을 하나의 도우미로 분해 할 수 있습니다. 일관된 스타일/국제 대회를 개최 할 수 있도록 준비하는 것이 좋습니다. 단 하나의 종속성은 파일이 필요한 경우에만 require d를 얻습니다. 그렇지 않으면 테스트/개발 종속성을로드하기위한 두 개의 도우미가 있습니다. 그 자체는 모든 별도의 테스트 도우미와 스크립트에 require d이고 응용 프로그램 런타임 종속성을로드하기위한 것입니다.

    또한 프로젝트에서 폴더의 모든 항목을 "영리하게"자동로드하도록하십시오 (예 :

    Dir["lib/*.rb"].each{ |file| require file } 
    

    파일 시스템으로 인해로드 순서가 임의로 변경 될 수 있습니다. 'x.rb'가 'y.rb'보다 먼저로드되어야하는 파일 사이에 실제로 종속성이있는 경우 폴더의 내용이 마지막으로 변경된 시간에 시스템에 어떤 영향이 있었는지에 따라 체계적으로 성공/실패하게됩니다.

    +0

    설명해 주셔서 감사합니다. 그러나 그것이 어제 일하고 있다는 사실은 어떨까요? 그리고 그것은 전에 몇 번 나에게 일어났습니다. 그것은 항상 동일합니다 - 나는 내 프로젝트에서 일하고 있고, 잠시 멈추고, 내가 돌아 왔을 때, 그 같은 행동이 또 다시 좋아. 그런 다음 시간이 지나면 모든 것이 정상으로 되돌아갑니다. 미치겠습니다. – mbajur

    +0

    @mbajur : 디렉토리 목록을 사용하여 필요한 파일을 자동으로로드하는 코드가 있습니까? 'Dir [ "lib/*. rb"]. each {| file | 파일 필요}'? 이렇게하면 파일 시스템으로 인해로드 순서가 임의로 변경 될 수 있습니다. 즉, 폴더의 내용이 마지막으로 변경된 시점의 상황에 따라 체계적인 성공/실패가 발생합니다. –

    +0

    글쎄, 나 혼자서 작성한 것은 아무것도 없다. raiils/rspec 생성자가 만든 기본 파일 일 뿐이다. – mbajur

    관련 문제