如何在Rspec中存根载波?

时间:2012-03-05 05:38:32

标签: ruby-on-rails rspec carrierwave

我想在我的测试中使用stubwave来阻止它在网络上获取图像。我将如何实现这一目标?

我的抓取工具解析远程网页,并将一个图片网址保存到模型中。 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!)

4 个答案:

答案 0 :(得分:14)

TopicImageUploader.any_instance.stub(:download!)

答案 1 :(得分:9)

这就是我在spec_helper中使用的内容:

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

这完全阻止了所有真实的文件上传(请注意,我使用的是载波0.5.8,这是写作时的最新版本,如果您使用的版本较旧,可能会不同)。如果要控制哪些存根上传的测试,可以使用:

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

答案 2 :(得分:4)

我通过CarrierWave初始化程序中的简单配置将测试套件时间从25秒减少到仅仅2秒:

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

此配置会跳过ImageMagick,MiniMagick等的图像处理(调整大小,裁剪......)。

答案 3 :(得分:0)

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