【问题标题】:rspec and carrierwave - how set an image url directly (BYPASS carrierwave uploader during testing)rspec 和carrierwave - 如何直接设置图片网址(在测试期间绕过carrierwave 上传器)
【发布时间】:2014-06-03 14:18:23
【问题描述】:

我正在编写一些 rspec 规范,其中对象的 widgetpic 字段需要指向实际图像,但没有使用载波上传器。

在测试的时候,我只想绕过上传器,手动设置一张测试图片的url。具体来说,我在网上有一些测试图像,只是想让foo.widgetpic.url返回一些固定位置:“http://mybucket.s3.amazonaws.com/test_pix/test1.png

Widget 模型有:

mount_uploader :widgetpic, WidgetPicUploader

所以在我的 FactoryGirl 工厂中,我认为我需要做这样的事情

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

我尝试设置 widgetpic_url 和 remote_widgetpic_url 但这不起作用(widgetpic.url 仍然返回我在上传器中定义的默认“无图像”图像)。

【问题讨论】:

    标签: rspec carrierwave


    【解决方案1】:

    您的上传器似乎有其他问题,而不是工厂。您可以发布您的载波配置吗?

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

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

    但是,请注意,这样做不会绕过 CarrierWave。 CarrierWave 将为您获取远程图像并使用下载的图像重新上传到您的上传器中指定的位置。您可以将此技术与 WebMockVCR 之类的东西结合使用,以模拟和/或记录 HTTP 请求并进行回放。

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

    factory :widget do   
      # ...
    
      widgetpic Rack::Test::UploadedFile.new(File.open(
        File.join(
          File.dirname(__FILE__), '../fixtures/images/your_image_here.png')))
    end
    

    该图像将用于模拟上传,但不会发布到 S3 上的位置,您可以从端到端测试上传。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-11-24
      • 1970-01-01
      • 2023-03-26
      • 2013-08-04
      • 2013-01-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多