Rails 3 test fixtures with carrierwave?

前端 未结 6 1081
轻奢々
轻奢々 2021-02-05 09:02

I\'m working on upgrading from attachment_fu to carrierwave, since attachment_fu is broken in rails 3.

None of the tests are able to run, because we have invalid fixture

6条回答
  •  轮回少年
    2021-02-05 09:47

    The only way I've managed to get this to work is to use a storage provider specifically for testing that doesn't actually save/read files.

    In your config/initializers/carrier_wave.rb Add a NullStorage class that implements the minimum interface for a storage provider.

    # NullStorage provider for CarrierWave for use in tests.  Doesn't actually
    # upload or store files but allows test to pass as if files were stored and
    # the use of fixtures.
    class NullStorage
      attr_reader :uploader
    
      def initialize(uploader)
        @uploader = uploader
      end
    
      def identifier
        uploader.filename
      end
    
      def store!(_file)
        true
      end
    
      def retrieve!(_identifier)
        true
      end
    end
    

    Then when initializing CarrierWave add a clause for the test environment, e.g.,

    if Rails.env.test?
        config.storage NullStorage
    end
    

    Here is a gist of my complete carrier_wave.rb for reference. It also includes how to setup S3 for uploads in staging/production and local storage for development so you can see how to configure CarrierWave in context.

    Once CarrierWave is configured you can simply put any string in the fixtures column to simulate an uploaded file.

提交回复
热议问题