2015-01-07 13 views
18

Sto provando a verificare che il mio utente abbia un valore di foto quando carico un'immagine. Funziona bene nel browser e la funzionalità di base del test passa, ma se provo ad affermare che user.photo non è zero, fallisce. Ecco il testCome verificare che un file sia caricato in un controller?

describe 'POST #update' do 
    context 'when there is an image' do 
    it 'renders the crop template' do 
     login(user) 
     photo = File.open(File.join(Rails.root, '/spec/fixtures/images/bob-weir.jpg')) 
     post :update, user: { photo: photo } 

     expect(response).to render_template('crop') 
     user.reload 
     expect(user.photo.file).to_not be_nil 
    end 
    end 
end 

sta producendo:

Failure/Error: expect(user.photo.file).to_not be_nil 
     expected: not nil 
      got: nil 

Se metto un debugger al termine del test e fare user.photo, ottengo:

(byebug) user.photo 

#<PhotoUploader:0x007fa447029480 @model=#<User id: 226, ..... photo: nil>, 
@mounted_as=:photo, @storage=#<CarrierWave::Storage::File:0x007fa4468ddbb8 
@uploader=#<PhotoUploader:0x007fa447029480 ...>>> 

C'è qualche modo per assicurarsi che il controller abbia effettivamente salvato un valore fotografico nel database? È solo un attributo sul modello e salva il nome del file come una stringa.

risposta