2

我有这个规格:

post :create, :room_id => @room.id, :image => Rack::Test::UploadedFile.new(path, 'text/jpg')
response.should redirect_to admin_room_path(@room)

@room.reload.pictures.count.should == 1
pic = @room.pictures.first

File.open(pic.image.url).should == File.open(path)
# Not working

它失败并出现以下错误:

1) Admin::PicturesController should fail to upload a new picture
     Failure/Error: File.open(pic.image.url).should == File.open(path)
     Errno::ENOENT:
       No such file or directory - /uploads/picture/image/5134d0fa93ff007fcd000016/image1.jpg
     # ./spec/controllers/admin/pictures_controller_spec.rb:26:in `initialize'
     # ./spec/controllers/admin/pictures_controller_spec.rb:26:in `open'
     # ./spec/controllers/admin/pictures_controller_spec.rb:26:in `block (2 levels) in <top (required)>'

未找到该文件,但/uploads/picture/image/5134d0fa93ff007fcd000016/已创建目录。

除文件外的所有内容都是正确的。

我的初始化程序:

if Rails.env.test? or Rails.env.cucumber?
  CarrierWave.configure do |config|
    config.storage = :file
    config.enable_processing = true
  end
end

我错过了什么吗?

4

1 回答 1

3

pic.image.url是没有主机的 URL 路径。

尝试:

File.open(File.join(Rails.root, "public", pic.image.url)).should == File.open(path)

或者,我的偏好是让carrierwave处理它:

File.open(pic.image.path).should == File.open(path)

或比较内容:

pic.image.read.should == File.open(path).read
于 2013-03-04T18:10:56.610 回答