2013-03-04 122 views
2

我有这个天赋: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 

我缺少的东西?

回答

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 
+0

''没有这样的文件或目录 - /用户/ Intrepidd/git/xxxx/uploads/picture/image/5134e3ff93ff005583000030/image1.jpg'' – Intrepidd 2013-03-04 18:12:55

+0

而对于第二种:'UT中的无效字节序列F-8'' – Intrepidd 2013-03-04 18:13:42

+0

对不起,更新了一下。 – 2013-03-04 18:13:51