Ответ 1
TopicImageUploader.any_instance.stub(:download!)
Я хочу заглушить несущую волну, чтобы она не удаляла изображения в Интернете во время моих тестов. Как я мог бы заглушить все, чтобы достичь этого?
Мой искатель анализирует удаленную веб-страницу и сохраняет один 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!)
TopicImageUploader.any_instance.stub(:download!)
Это то, что я использую в своем spec_helper:
class CarrierWave::Mount::Mounter
def store!
end
end
Это полностью блокирует все реальные загрузки файлов (обратите внимание, что я использую это с несущей волной 0.5.8, которая является самой новой версией на момент написания, если вы используете гораздо более старую версию, она может отличаться). Если вы хотите контролировать тесты, которые загружают заглушки, вы можете использовать:
CarrierWave::Mount::Mounter.any_instance.stub(:store!)
Я сократил время тестового набора с 25 секунд до 2 секунд с простой конфигурацией в инициализаторе CarrierWave:
# config/initializers/carrier_wave.rb
CarrierWave.configure do |config|
config.enable_processing = false if Rails.env.test?
end
Эта конфигурация пропускает манипуляции с изображениями (изменение размера, обрезка,...) изображения ImageMagick, MiniMagick.
allow_any_instance_of(CarrierWave::Uploader::Base).to receive(:store!).and_return nil