2011-08-23 31 views
4

我有一個CarrierWave :: Uploader,它可以生成上傳圖像的三個版本。如何使用Rspec測試carrierwave版本大小

# 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不一定會調整其大小到指定的尺寸。有關如何使用存根測試此任何想法?

+0

你有沒有在這裏取得任何進展?我有類似的問題。 – BenU

+0

@BenU不,我想我找不到更好的解決方案 – stream7

回答

2

這是我的解決方案,它實際上處理圖像。這比存根更慢,但驗證實際調整大小(只要輸入圖像大於目標大小)。

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