Как проверить размер версии carrierwave с помощью Rspec - PullRequest
4 голосов
/ 23 августа 2011

У меня есть 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 не обязательно изменяет его размер до указанных размеров. Любые идеи о том, как проверить это с помощью заглушек?

Ответы [ 2 ]

2 голосов
/ 13 апреля 2013

Вот мое решение, которое на самом деле обрабатывает изображение. Это медленнее, чем заглушки, но проверяет фактическое изменение размера (если входное изображение больше целевого размера).

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
0 голосов
/ 03 марта 2015

, но вы можете попытаться добавить это

before do
  DocumentUploader.enable_processing = true
end

, потому что обработка (текущая версия и другие версии) может быть отключена по умолчанию из соображений производительности

имела похожую проблему, связанную сprocess set_file_name_to_model что-то устанавливало "имя_файла" для атрибута модели

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

...