Ich versuche zu testen, dass mein Benutzer einen Fotowert hat, wenn ich ein Bild hochlade. Es funktioniert gut im Browser, und die grundlegende Funktionalität des Tests besteht, aber wenn ich versuche, diesen Benutzer zu bestätigen. Foto ist nicht Null, es schlägt fehl. Hier ist der TestWie testen, dass eine Datei in einem Controller hochgeladen wird?
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
produziert:
Failure/Error: expect(user.photo.file).to_not be_nil
expected: not nil
got: nil
Wenn ich einen Debugger am Ende des Tests setzen und user.photo tun, erhalte ich:
(byebug) user.photo
#<PhotoUploader:0x007fa447029480 @model=#<User id: 226, ..... photo: nil>,
@mounted_as=:photo, @storage=#<CarrierWave::Storage::File:0x007fa4468ddbb8
@uploader=#<PhotoUploader:0x007fa447029480 ...>>>
Gibt es eine Möglichkeit, nur sicherzustellen, dass der Controller tatsächlich einen Fotowert in der Datenbank gespeichert hat? Es ist nur ein Attribut im Modell und speichert den Dateinamen als String.