rspec + carrierwave:未创建图像

时间:2013-03-04 16:57:30

标签: ruby-on-rails rspec carrierwave

我有这个规格:

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

我错过了什么吗?

1 个答案:

答案 0 :(得分:3)

pic.image.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