如何在控制器中测试文件是否已上传?

20

我正在尝试测试上传图片时,我的用户是否具有照片值。在浏览器中,它的功能正常运行,基本测试功能通过,但如果我尝试断言user.photo不为空,则会失败。以下是测试内容:

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

正在生产:

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

如果我在测试的末尾放置调试器并执行 user.photo,那么我会得到:

(byebug) user.photo

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

有没有办法确保控制器实际在数据库中保存了照片的值?它只是模型上的一个属性,它将文件名保存为字符串。

1个回答

31

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接