CarrierWave comes with some RSpec matchers which will make testing more comfortable. Let's say you have an Uploader like this:
class MyUploader < CarrierWave::Uploader::Base
  include CarrierWave::MiniMagick
  # Create different versions of your uploaded files:
  version :small do
    process resize_to_fill: [100, 100]
  end
  
  version :medium do
    process resize_to_fit: [200, nil]
  end
  
  version :large do
    process resize_to_limit: [400, 400]
  end
end
Imagine you have a class Movie with an attribute poster. In your spec file, you can add tests to check the dimensions of the several versions by writing
RSpec.describe Movie, type: :model do
  include CarrierWave::Test::Matchers
  describe '#poster' do
    before do
      @movie = create(:movie)
      @movie.poster.store!(File.open('spec/fixtures/test_poster.jpg'))
    end
    describe '.small' do
      it "scales down an image to be exactly 100 by 100 pixels" do
        expect(@movie.poster.small).to have_dimensions(100, 100)
      end
    end
    describe '.medium' do
      it "scales down an image to be no wider than 200 pixels" do
        expect(@movie.poster.medium).to be_no_wider_than(200)
      end
    end
    describe '.large' do
      it "scales down a landscape image to be no larger than 400 by 400 pixels" do
        expect(@movie.poster.large).to be_no_larger_than(400, 400)
      end
    end
  end
end
A more specific example can be found in the 
  Readme
  
    Show archive.org snapshot
  
 of carrierwave. A list of all matchers can be found 
  here
  
    Show archive.org snapshot
  
.
Posted by Florian Leinsinger to makandra dev (2018-04-05 07:38)