2012-03-05 24 views
11

Tôi muốn phân phát sóng mang để ngăn không cho tìm nạp hình ảnh trên web trong khi kiểm tra. Làm thế nào tôi sẽ làm những điều để đạt được điều này?Làm thế nào để stub carrierwave trong Rspec?

Trình thu thập thông tin của tôi phân tích cú pháp trang web từ xa và lưu một url hình ảnh vào mô hình. Carrierwave sẽ tự động tìm nạp hình ảnh đó trong quá trình lưu. Nó hoạt động tốt.

Tuy nhiên, tôi có một bài kiểm tra về việc phân tích các trang và mỗi lần nó sẽ tải xuống tệp, điều này sẽ làm chậm quá trình kiểm tra.

UPDATE:

tôi gắn kết người tải lên như sau (trong cột kẹp giấy tồn tại trước đó)

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

Tôi cố gắng để còn sơ khai sau, nhưng không làm việc:

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

thử cách này: 'cho phép (Chủ đề) .để nhận (: store_image!)' – ajahongir

Trả lời

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

Cú pháp RSpec mới: 'allow_any_instance_of (TopicImageUploader) .để nhận (: tải xuống!)' – MikDiet

9

Đây là những gì tôi đang sử dụng trong spec_helper của mình:

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

Điều này hoàn toàn chặn tất cả các tệp tải lên thực sự (lưu ý rằng tôi đang sử dụng tính năng này với sóng mang 0.5.8, là phiên bản mới nhất tại thời điểm viết bài, nếu bạn đang sử dụng nhiều phiên bản cũ hơn). Nếu bạn muốn kiểm soát kiểm tra mà còn sơ khai cập nhật, bạn có thể sử dụng:

CarrierWave::Mount::Mounter.any_instance.stub(:store!) 
+0

giải pháp của bạn tổng quát hơn mà tôi thích. Tuy nhiên tôi đang sử dụng 0.5.8 và stubbing trên 'any_instance' dường như không có tác dụng. – lulalala

+0

Hoạt động tuyệt vời cho tôi trong carrierwave 0.7.1. Với Mocha bạn có thể sử dụng: CarrierWave :: Mount :: Mounter.any_instance.stubs (: store!) Trong spec_helper và trong bài kiểm tra: CarrierWave :: Mount :: Mounter.any_instance.unstub (: store!) – AJP

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

tôi giảm thời gian kiểm tra-suite của tôi từ 25 giây xuống còn 2 giây với một cấu hình đơn giản trong initializer CarrierWave:

# config/initializers/carrier_wave.rb 
CarrierWave.configure do |config| 
    config.enable_processing = false if Rails.env.test? 
end 

Cấu hình này bỏ qua thao tác hình ảnh (thay đổi kích thước, cắt xén, ...) của ImageMagick, MiniMagick ect.

Các vấn đề liên quan