cgat
cgat

Reputation: 3909

Rspec and Carrierwave. When changing config.storage to file for testing, I get an ArgumentError is not a recognized storage provider exception

I have two carrierwave uploaders in my application. ImageUploader is for uploading locally and ImageRemoteUploader for uploading to Amazon S3 storage using fog. ImageUploader has storage set to :file and ImageRemoteUploader has storage set to :fog. This setup works fine, but when I start to set up my rspec tests, things change.

The problem arises when I change the ImageRemoteUploader to use :file storage during testing. I do this in my fog initialization file. The file, /config/initializers/fog.rb, looks like:

CarrierWave.configure do |config|
  if Rails.env.test?
    config.storage = :file
    config.enable_processing = false
  else
    config.fog_credentials = {
    :provider               => 'AWS',       # required
    :aws_access_key_id      => 'XXXXXXXX',       # required
    :aws_secret_access_key  => 'XXXXXX',       # required
    :region                 => 'XXXX'  # optional, defaults to 'us-east-1'
    }
    config.fog_directory  = 'xxx'                     # required
    config.fog_public     = true                                   
  end 
end

When I do this, I get an ArgumentError is not a recognized storage provider carrierwave exception. When I use the fog credentials (I don't set config.storage to :file), the test works as expected.

Carrierwave 0.7.1, Rails 3.2.8, Ruby 1.9.3, Rspec 2.10

Thanks.

Upvotes: 1

Views: 2445

Answers (1)

zetetic
zetetic

Reputation: 47548

I'd try moving the config.storage and config.enable_processing lines into lib/initializers/carrierwave.rb, as recommended in the Carrierwave docs.

Fog also has its own mocking support, which is enabled by running Fog.mock! before the examples. This might be a better approach.

Upvotes: 3

Related Questions