2012-03-05 2 views
11

테스트 중에 웹에서 이미지를 가져 오지 못하도록 반송파를 스텁 싶습니다. 이 일을 성취하기 위해 나는 어떻게 물건을 찔러 넣을 까?Rspec에서 반송파를 스터핑하는 방법은 무엇입니까?

내 크롤러가 원격 웹 페이지를 구문 분석하고 하나의 이미지 URL을 모델에 저장합니다. Carrierwave는 저장 작업 중에 해당 이미지를 자동으로 가져옵니다. 잘 작동한다.

그러나 나는 페이지의 구문 분석에 대한 검사를, 모든 시간은 테스트 속도가 느려 파일을 다운로드합니다.

업데이트 : (사전 기존의 클립 열에서) 다음

mount_uploader :image, TopicImageUploader, :mount_on => :image_file_name 

내가 다음 스텁하려고했으나 어느 쪽도 근무로 업 로더를 장착

:

Topic.any_instance.stub(:store_image!) 
Topic.any_instance.stub(:store_image_file_name!) 
Topic.any_instance.stub(:store_image_remote_url!) 
+0

수신 허용 (토픽). 수신 (: 저장소 _ 이미지)! – ajahongir

답변

14
TopicImageUploader.any_instance.stub(:download!) 
+2

새로운 RSpec 구문 : allow_any_instance_of (TopicImageUploader) .to receive (: download!) – MikDiet

9

이것은 내 spec_helper에서 사용하는 것입니다.

class CarrierWave::Mount::Mounter 
    def store! 
    end 
end 

실제 파일 업로드를 완전히 차단합니다 (이전 웨이브 폼 0.5.8과 함께 사용하고 있습니다. 이전 버전을 많이 사용하는 경우 다를 수 있음).). 당신은 업로드를 스텁 테스트를 제어하려면, 당신은 사용할 수 있습니다

:
allow_any_instance_of(CarrierWave::Uploader::Base).to receive(:store!).and_return nil 
+0

내가 좋아하는 솔루션이 더 일반화되었습니다. 그러나 나는 0.5.8을 사용하고 있으며'any_instance'에 대한 스터 빙은 효과가없는 것 같습니다. – lulalala

+0

나를 위해 좋은 작품 carrierwave 0.7.1. 모카를 사용하면 spec_helper 및 테스트에서 CarrierWave :: Mount :: Mounter.any_instance.stubs (: store!)를 사용할 수 있습니다. CarrierWave :: Mount :: Mounter.any_instance.unstub (: store!) – AJP

0
나는 25 초에서 내 테스트 스위트 시간을 감소 CarrierWave 이니셜 라이저에서 간단한 설정으로 단 2 초
# config/initializers/carrier_wave.rb 
CarrierWave.configure do |config| 
    config.enable_processing = false if Rails.env.test? 
end 

이 구성은 ImageMagick, MiniMagick 등의 이미지 조작 (크기 조정, 자르기 등)을 건너 뜁니다.

4

CarrierWave::Mount::Mounter.any_instance.stub(:store!) 
관련 문제