rspec和carrierwave-如何直接设置图像url(在测试期间绕过carrierwave上载程序)

rspec和carrierwave-如何直接设置图像url(在测试期间绕过carrierwave上载程序),rspec,carrierwave,Rspec,Carrierwave,我正在编写一些rspec规范,其中对象的widgetpic字段需要指向实际图像,但不使用carrierwave上传程序 在测试中,我只想绕过上传程序,手动设置测试图片的url。具体来说,我有一些在线测试图像,只想让foo.widgetpic.url返回一些固定位置:“ 小部件模型具有: mount_uploader :widgetpic, WidgetPicUploader 所以在我的女工厂里,我想我需要这样做 trait :test_pic do SOMETHING "http://m

我正在编写一些rspec规范,其中对象的widgetpic字段需要指向实际图像,但不使用carrierwave上传程序

在测试中,我只想绕过上传程序,手动设置测试图片的url。具体来说,我有一些在线测试图像,只想让
foo.widgetpic.url
返回一些固定位置:“

小部件模型具有:

mount_uploader :widgetpic, WidgetPicUploader
所以在我的女工厂里,我想我需要这样做

trait :test_pic do
   SOMETHING "http://mybucket.s3.amazonaws.com/test_pix/test1.png"
end

我尝试设置widgetpic_url和remote_widgetpic_url,但没有成功(widgetpic.url仍然返回我在上传程序中定义的默认“无图像”图像)。

似乎你的上传程序有其他问题,而不是工厂。你能发布你的carrierwave配置吗

除此之外,远程映像的正确工厂语法是远程url:

trait :test_pic do
  remote_widgetpic_url "http://mybucket.s3.amazonaws.com/test_pix/test1.png"
end
但是,请注意,这样做不会绕过CarrierWave。CarrierWave将为您获取远程图像,并使用下载的图像重新上载到上载程序中指定的位置。您可以将此技术与类似或的东西结合使用,以模拟和/或记录HTTP请求并回放它

一种更简单的方法可能是使用内置的模拟功能来模拟测试的上传。这样,您就可以在工厂中放置一个虚拟图像:

factory :widget do   
  # ...

  widgetpic Rack::Test::UploadedFile.new(File.open(
    File.join(
      File.dirname(__FILE__), '../fixtures/images/your_image_here.png')))
end
该图像将用于模拟上传,但不会发布到S3上的位置,您可以从端到端测试上传