Tôi đang cố gắng kiểm tra xem người dùng của tôi có giá trị ảnh khi tôi tải lên một hình ảnh hay không. Nó hoạt động tốt trong trình duyệt, và chức năng cơ bản của bài kiểm tra đã trôi qua, nhưng nếu tôi cố gắng xác nhận rằng user.photo không phải là không, thì nó không thành công. Đây là thử nghiệmCách kiểm tra xem tệp có được tải lên trong bộ điều khiển không?
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
được sản xuất:
Failure/Error: expect(user.photo.file).to_not be_nil
expected: not nil
got: nil
Nếu tôi đặt một trình gỡ lỗi ở phần cuối của bài kiểm tra và làm user.photo, tôi nhận được:
(byebug) user.photo
#<PhotoUploader:0x007fa447029480 @model=#<User id: 226, ..... photo: nil>,
@mounted_as=:photo, @storage=#<CarrierWave::Storage::File:0x007fa4468ddbb8
@uploader=#<PhotoUploader:0x007fa447029480 ...>>>
Có cách để đảm bảo rằng bộ điều khiển thực sự đã lưu giá trị ảnh trong cơ sở dữ liệu? Nó chỉ là một thuộc tính trên mô hình và nó lưu tên tập tin dưới dạng một chuỗi.