2014-03-07 7 views

답변

6

spork 1.0.0rc4 및 rspec 2.14.1/rspec-core 2.14.8에서 실행 중입니다. 지금까지 내가 그것을 알아낼 수 있기 때문에,이 문제는 다음에있다 : 모든 기자 출력이 DRB 클라이언트로 전송되도록 포트 (DRB 클라이언트) :

  1. Spork는 로컬 호스트를 가리 키도록 $ 표준 출력을 구성합니다. 이제 Spork.prefork 실행 된 후 발생합니다.
  2. 내 Spork.prefork 블록에서 (자연스럽게) RSpec.configure do config |를 수행하고 있으며 config 호출 중 하나 (특히 config.mock_with : rr)가 결국 RSpec.configuration의 리포터/포매터가 초기화되지만 잘못된 stdout은 사용되지 않습니다.
  3. RSpec.configuration에는 초기화 된 리포터/포맷터를 플러시하여 지연 초기화를 다시 수행하는 재설정 메소드 (@private로 표시되지만 아아)가 있습니다.
  4. 또한 RSpec.configuration.output_stream은 설정되지 않습니다. 결론은, Spork.each_run에이 코드를 추가하는 문제를 해결하기 위해 나타납니다 사람이이 문제를 해결하기 위해 더 우아한 방법을 알고 있다면

    if Spork.using_spork? 
        RSpec.configure do |config| 
         config.reset 
         config.output_stream = $stdout 
        end 
    end 
    

, 알려주세요!

+0

감사합니다. 이 명령 줄에서 rspec 실행할 때 작동합니다. 그러나 vim에서 내 사양을 실행할 때 출력이 표시되지 않습니다. 그냥 정력을 위해 output_stream을 설정하는 올바른 방법을 알아 내야 할 것처럼 보입니다. – user341493

+0

Spork.each_run에 중단 점을 넣고 $ stdout이 설정된 값을 확인하십시오. 실제로이 값을 가지고 플레이해야 할 수도 있습니다. 또한, 위의 블록이 Spork.using_spork 인 경우 내부에 있어야한다는 것을 알았습니까? 그래서 그것은 CI 성능 (spork없이 실행되는)에 영향을주지 않습니다. – astgtciv

+0

동일한 문제가 있었지만 제 경우에는'config.output_stream = $ stdout'이 해결했습니다. 감사 –

0

@astgtciv 이미 질문에 대답하지만, 여기에 내가 그 우연히 관련 일을 주석으로 쓰기 위해 너무 깁니다입니다 : @의 astgtciv의 수정이 나를 위해 일하지만, 내가 정의를 소개 할 때 다시 파산 사용

포맷터. Spork가 부팅 할 때 포맷터가 초기화되므로 출력 스트림이 테스트 러너 윈도우가 아닌 DRB 서버 윈도우에있게됩니다.

내 수정, 다음 Spork.each_run 내부의 출력을 변경, 내 사용자 정의 포맷터에 attr_accessor :output을 추가했다 예 :

rspec_formatters = RSpec.configuration.formatters 

Spork.each_run do 
    if Spork.using_spork? 
    RSpec.configure do |config| 
     config.output_stream = $stdout 
    end 

    rspec_formatters.each do |formatter| 
     if formatter.respond_to?(:output=) 
     formatter.output = $stdout 
     end 
    end 
    end 
end 

더 간단한 수정은이 코드 블록 내부 포맷터를 추가하는 것입니다,하지만 난이 생각 테스트 실행 속도면에서 더 빠르며 동일한 포맷터를 여러 번 추가 할 위험이 없습니다. 그 추측을 확인하지 않았습니다.