2012-05-11 2 views
3

공유 예제를 변경하면 spork에서 다시로드하도록하려면 어떻게합니까? 나는 다음을 시도하지만, 그들을 다시로드 아니에요 :Reload RSpec Guard 및 Spork와 공유 예제

Spork.each_run do 
    Dir[Rails.root.join("spec/shared_examples/*.rb")].each {|f| require f} 
end 

내가 공유 예 변경하는 경우는 ENV를 다시로드가 내 Guardfile에 감시자를 추가 할 수 있지만 내 응용 프로그램이 큰 것을 알 수는 약 10 소요 전체 환경을 다시로드하는 데 -15 초가 걸립니다.

watch(/^spec\/shared_examples\/.*\.rb$/) 

변경된 공유 예제를 다시로드하는 것이 좋지만, 피드백 루프가 더 빨라질 수 있습니다. 환경 설정 파일 test.rb에서

, 당신은 당신이 캐싱을하지 않을 수 있습니다 즉,이

config.cache_classes = !(ENV['DRB'] == 'true') 

이 있는지 확인 : 여기

답변

3

나는 으로 Spork.prefork의 shared_examples를로드하고 있으며, 이로 인해 각 실행마다 다시로드되지 않도록하고 있습니다. Spork.prefork에서 해당 행을 제거하고 Spork.each_run에있는 경우에만 문제가 해결되었으므로 shared_examples에 대한 변경 사항은 테스트가 실행될 때 반영됩니다.

+0

당신은 어떻게'prefork' 블록에 공유 예제를로드하지 ** 않습니까? 'Dir [Rails.root.join ("spec/support/**/*. rb")]. 각 {| f | 우리의'prefork' 블록에서 f}'가 필요합니다. 모든 블록은 공유 된 예제를 포함하여 확실히로드됩니다. ** 공유 된 예제가'prefork' 블록에로드되는 것을 어떻게 방지합니까 **? –

+1

아, 저기요 : 우리는'spec/support/shared_examples'에 공유 예제를 가지고 있었고, 당신은'spec/shared_examples'에 그것을 가지고 있습니다. 그것들을'spec/shared_examples'로 옮기면됩니다 만, 공유 예제가 어디에 속합니까? 'support' 폴더에서 그들을 옮기고 싶지 않다면 어떻게'prefork' 블록에로드되지 않게 할 수 있습니까? –

+1

그래서'prefork'에서이 코드를 사용하면 공유 예제가로드되지 않습니다 :'Dir [Rails.root.join ("spec/support/**/*. rb")]. reject {| f | f [% r {/ shared_examples /}]}. 각 {| f | f}'이 (가) 필요합니다. –

0
Spork.prefork do 
    Dir[Rails.root.join("spec/shared_examples/*.rb")].each {|f| require f} 
end 
+0

환경이로드 될 때 prefork는 한 번만 실행되지 않습니까? –

+0

그래,하지만 당신은 그 파일들을 지켜 보라고 말할 것입니다;) – thiagofm

+1

내가 따라하기로 확신 할 수 없습니다 ... 실제로 파일을 감시하지 않습니다, 그것이 내가 가드를 사용하고있는 것입니다. –

8

당신이 확인해야합니다 몇 가지 있습니다 Spork 환경에 있다면

그런 다음에하는 이들은 당신이 다시로드하고 클래스 각 실행을해야 .each_run

FactoryGirl.reload 
ActiveSupport::Dependencies.clear 
ActiveRecord::Base.instantiate_observers 

이에 있는지 확인하십시오.

또한 share_examples로드는 .each_run 섹션에 보관합니다.

Spork.each_run do 
    FactoryGirl.reload 
    ActiveSupport::Dependencies.clear 
    ActiveRecord::Base.instantiate_observers 
    Dir[Rails.root.join("spec/shared_examples/*.rb")].each {|f| require f} 
end 

당신은 모든 부하 제대로 확인 일을 확인하기 위해 .each_run 섹션의 4 개 라인의 순서로 재생해야 할 수도 있습니다.

+0

의견을 보내 주셔서 감사합니다. 내가 올바르게하고있는 것으로 밝혀졌지만, prefork과 each_run 모두에서 공유 된 예제가 필요했습니다. 웬일인지 그것이 일종의 갈등을 일으키고 있었고, 그들은 각각의 달리기에서로드되지 않고 있었다. –

+0

기꺼이 도와 드리겠습니다. 제 대답이 도움이되고 정확하다고 생각한다면, 감사하겠습니다. 행운을 빕니다! –