【问题标题】:How to test carrierwave version size with Rspec如何使用 Rspec 测试载波版本大小
【发布时间】:2011-08-23 09:24:34
【问题描述】:

我有一个 CarrierWave::Uploader 可以生成三个版本的上传图片。

# Process files as they are uploaded:                                                                  
   process :resize_to_fit => [400, 400]                                                                   

   # Create different versions of your uploaded files:                                                    
   version :thumb do                                                                                      
     process :resize_to_fit => [60, 60]
   end

   version :small do
     process :resize_to_fit => [24, 24]
   end

在我的测试中,我尝试验证生成图像的尺寸

require 'spec_helper'
require 'carrierwave/test/matchers'

describe 'manufacturer logo uploader' do
  include CarrierWave::Test::Matchers

  before(:each) do
    image_path = Rails.root.join('test/fixtures/images', 'avatar100.gif').to_s
    @manufacturer = Factory.create(:manufacturer, :page_status => 1)
    @manufacturer.logo_image = File.open(image_path)
    @manufacturer.save!
  end

  context "manufacturer logo dimensions" do
    it "should have three versions" do
      @manufacturer.logo_image.should have_dimensions(400,400)
      @manufacturer.logo_image.thumb.should have_dimensions(60,60)
      @manufacturer.logo_image.small.should have_dimensions(24,24)
    end
  end

end

但此测试取决于实际图像,resize_to_fit 不一定会将其调整到指定尺寸。关于如何使用存根进行测试的任何想法?

【问题讨论】:

  • 你有没有在这方面取得任何进展?我也有类似的问题。
  • @BenU 不,我想我找不到更好的解决方案

标签: ruby-on-rails-3 rspec rspec2 carrierwave


【解决方案1】:

这是我的解决方案,它实际处理图像。这比存根慢,但会验证实际调整大小(只要输入图像大于目标大小)。

describe 'images' do

  include CarrierWave::Test::Matchers

  before do
    MyUploader.enable_processing = true
  end

  it 'are resized' do
    path = Rails.root.join *%w[ spec data sample.png ]
    my_model = FactoryGirl.create :my_model, image: path.open

    my_model.artwork.small.should be_no_larger_than(300, 400)
  end

  after do
    MyUploader.enable_processing = false
  end

end

【讨论】:

    【解决方案2】:

    远射,但你可以尝试添加这个

    before do
      DocumentUploader.enable_processing = true
    end
    

    因为处理(当前版本和其他版本)可能出于性能原因默认关闭

    有与process set_file_name_to_model 相关的类似问题,即在模型属性上设置“file_name”

    http://ruby-on-rails-eq8.blogspot.co.uk/2015/03/carrierwave-uploader-not-triggering.html

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-21
      • 1970-01-01
      • 1970-01-01
      • 2023-03-21
      • 1970-01-01
      相关资源
      最近更新 更多