Как заглушить несущую волну в Rspec?

Я хочу заглушить несущую волну, чтобы она не удаляла изображения в Интернете во время моих тестов. Как я мог бы заглушить все, чтобы достичь этого?

Мой искатель анализирует удаленную веб-страницу и сохраняет один URL-адрес изображения в модели. Carrierwave автоматически извлекает это изображение во время операции сохранения. Это работает хорошо.

Однако у меня есть тест о разборе страниц, и каждый раз он загружает файл, что замедляет тестирование.

UPDATE:

Я устанавливаю загрузчик следующим образом (в уже существующем столбце скрепки)

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!)

Ответ 1

TopicImageUploader.any_instance.stub(:download!)

Ответ 2

Это то, что я использую в своем spec_helper:

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

Это полностью блокирует все реальные загрузки файлов (обратите внимание, что я использую это с несущей волной 0.5.8, которая является самой новой версией на момент написания, если вы используете гораздо более старую версию, она может отличаться). Если вы хотите контролировать тесты, которые загружают заглушки, вы можете использовать:

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

Ответ 3

Я сократил время тестового набора с 25 секунд до 2 секунд с простой конфигурацией в инициализаторе CarrierWave:

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

Эта конфигурация пропускает манипуляции с изображениями (изменение размера, обрезка,...) изображения ImageMagick, MiniMagick.

Ответ 4

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