2011-10-08 20 views
19

Realizzo un'applicazione di guide 3.1 utilizzando carrierwave per caricare i file su aws s3. Ho seguito le istruzioni sul repository github di carrierwave e ora sono in grado di caricare i file nel mio bucket aws. Sono i test che mi hanno bloccato. Negli ultimi due giorni ho cercato su google e di revisione, usando tutti gli altri Q & A che ho trovato, ma alla fine sto piangendo "mamma". Ecco quello che ho:rspec testing 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

01.235.164,106 mila
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 

Mentre il mio/public/uploads/tmp/è sempre riempito con la 'piccola' (e altre versioni) delle immagini la cui generazione sto test, i test continuano a fallire con il seguente messaggio di errore:

1) ImageFileUploader la piccola versione dovrebbe scalare verso il basso un'immagine di paesaggio per essere esattamente 50 per 50 pixel

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)>' 

so che quanto sopra significa che rspec non sta trovando il mio secchio test. Qualcuno ha qualche idea su cosa sto facendo male?

sarebbe molto grato per eventuali nuovi contatti.

AGGIORNAMENTO: 10/11/11 Il caricamento del file funziona ma non riesco a capire come eseguire il test per il trasferimento delle immagini. A breve termine, userò l'immagine di un segnaposto mentre applico il resto della mia app e riprenderò più tardi. Pubblicherò un ulteriore aggiornamento una volta capito questo. (Lasciate qualsiasi idea, se avete qualche intuizione, tuttavia.)

+0

nel caso in cui '@ uploader.store!' Stia memorizzando una directory? Penserei che questo dovrebbe essere un file specifico. – Andrew

+0

@BenU la mia risposta ha risolto il tuo problema? Si prega di accettarlo in tal caso :-) –

risposta

15

Hai provato questo?

  1. In /app/uploaders/image_file_uploader.rb rimuovere storage :fog

  2. In /config/initializers/carrierwave.rb aggiungere un blocco di configurazione simile per la produzione di come si deve per il test e cetrioli, e impostare config.storage = :fog lì.

+0

Questo ha risolto un problema correlato che stavo avendo a causa di configurazioni specifiche per uploader, invece di impostare semplicemente la mia configurazione 'storage' in base all'ambiente. Nel mio caso, tutti i miei upload andavano a S3, quindi non avevo bisogno di inserire la configurazione di archiviazione all'interno del modello di uploader stesso. Grazie! – jefflunt