2011-10-08 28 views
19

Estoy haciendo una aplicación Rails 3.1 usando carrierwave para subir archivos a aws s3. He seguido las instrucciones en el repositorio carrierwave github y ahora puedo subir archivos a mi bandeja de entrada. Es la prueba lo que me atascó. En los últimos dos días he estado buscando en Google y revisando, usando todas las otras Q & que he encontrado pero que finalmente estoy llorando 'mamá'. Esto es lo que tengo:prueba rspec carrierwave - newbie

/app/uploaders/image_file_uploader.rb

storage :fog 

def store_dir 
    "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}" 
end 

/config/initializers/carrierwave.rb

if Rails.env.test? or Rails.env.cucumber? 
    CarrierWave.configure do |config| 
    config.storage = :file 
    config.enable_processing = false 
    end 
end 

/spec/uploaders/image_file_uploader_spec.rb

require 'spec_helper' 
require 'support/fog_helper' 
require 'carrierwave/test/matchers' 

describe ImageFileUploader do 
    include CarrierWave::Test::Matchers 

    before do 
    ImageFileUploader.enable_processing = true 
    @user = Factory(:user, :email => "[email protected]") 
    @uploader = ImageFileUploader.new(@user, Factory(:image)) 
    @uploader.store!(File.open("#{Rails.root}/tmp/uploads/#{Rails.env}/images/")) 
    end 

    after do 
    @uploader.remove! 
    ImageFileUploader.enable_processing = false 
    end 

    context 'the tiny version' do 
    it "should scale down a landscape image to be exactly 50 by 50 pixels" do 
     @uploader.tiny.should have_dimensions(50, 50) 
    end 
    end 

spec/factories.rb

Factory.define :image do |image| 
    include ActionDispatch::TestProcess 

    image.date_taken   "Sun, 09 Oct 2011" 
    image.time_taken   "2000-01-01 03:41:00 UTC" 
    image.image_file   fixture_file_upload('spec/support/test_images/audi.png', 'image/png') 
    image.taken_by    "John Doe" 
    image.collection   "N/A" 
    image.comments    "Beautiful day!" 
    image.association :user 

end 

Mientras mi/public/uploads/tmp/está consiguiendo se llenaron de 'pequeña' (y otras versiones) de las imágenes cuya generación que estoy probando, las pruebas siguen fallar con el siguiente mensaje de error:

1) ImageFileUploader la versión pequeña imagen de un paisaje debería reducir a ser exactamente de 50 por 50 píxeles

Failure/Error: @uploader = ImageFileUploader.new(@user, Factory(:image)) 
Excon::Errors::NotFound: 
    Expected(200) <=> Actual(404 Not Found) 
    request => {:expects=>200} 
    response => #<Excon::Response:0x0000010569f928 @body="", @headers={}, @status=404> 
# ./spec/uploaders/image_file_uploader_spec.rb:11:in `block (2 levels) in <top (required)>' 

sé que lo anterior significa que rspec no es encontrar mi cubo de pruebas. ¿Alguien tiene alguna idea sobre lo que estoy haciendo mal?

sería súper agradecido por nuevos clientes potenciales.

ACTUALIZACIÓN: 11/10/11 La carga del archivo funciona pero me he detenido a la hora de descubrir cómo pasar la prueba que implica el paso de las imágenes. En el corto plazo, usaré una imagen de marcador de posición a medida que desarrolle el resto de mi aplicación y vuelva a esto más adelante. Voy a publicar una nueva actualización una vez que resuelva esto. (Sin embargo, deje cualquier idea si tiene alguna idea.)

+0

¿Debería su '@ uploader.store!' Estar almacenando un directorio? Yo pensaría que esto debería ser un archivo específico. – Andrew

+0

@BenU ¿mi respuesta resolvió su problema? Por favor, acéptelo en caso afirmativo :-) –

Respuesta

15

¿Ha probado esto?

  1. En /app/uploaders/image_file_uploader.rb eliminar storage :fog

  2. En /config/initializers/carrierwave.rb añadir un bloque de configuración similar para la producción a medida que tiene para la prueba y el pepino y establezca config.storage = :fog allí.

+0

Esto resolvió un problema relacionado que tenía debido a las configuraciones específicas del cargador, en lugar de simplemente configurar mi configuración de 'almacenamiento' en función del entorno. En mi caso, todas mis cargas iban a S3, así que no tuve que poner la configuración de almacenamiento dentro del mismo modelo de carga. ¡Gracias! – jefflunt