2011-10-08 55 views
19

我正在製作一個rails 3.1應用程序,使用carrierwave將文件上傳到aws s3。我遵循了carrierwave github存儲庫中的說明,現在可以將文件上傳到我的存儲桶中。這是讓我卡住的測試。在過去的兩天裏,我一直在搜索和修改,使用我發現的所有其他Q & A,但最後我哭了'媽媽'。下面是我得到了什麼:rspec測試carrierwave - 新手

/app/uploaders/image_file_uploader.rb

storage :fog 

def store_dir 
    "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}" 
end 

/config/initializers/carrierwave.rb

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

/spec/uploaders/image_file_uploader_spec.rb

require 'spec_helper' 
require 'support/fog_helper' 
require 'carrierwave/test/matchers' 

describe ImageFileUploader do 
    include CarrierWave::Test::Matchers 

    before do 
    ImageFileUploader.enable_processing = true 
    @user = Factory(:user, :email => "[email protected]") 
    @uploader = ImageFileUploader.new(@user, Factory(:image)) 
    @uploader.store!(File.open("#{Rails.root}/tmp/uploads/#{Rails.env}/images/")) 
    end 

    after do 
    @uploader.remove! 
    ImageFileUploader.enable_processing = false 
    end 

    context 'the tiny version' do 
    it "should scale down a landscape image to be exactly 50 by 50 pixels" do 
     @uploader.tiny.should have_dimensions(50, 50) 
    end 
    end 

spec/factories.rb

Factory.define :image do |image| 
    include ActionDispatch::TestProcess 

    image.date_taken   "Sun, 09 Oct 2011" 
    image.time_taken   "2000-01-01 03:41:00 UTC" 
    image.image_file   fixture_file_upload('spec/support/test_images/audi.png', 'image/png') 
    image.taken_by    "John Doe" 
    image.collection   "N/A" 
    image.comments    "Beautiful day!" 
    image.association :user 

end 

雖然我/公/上傳的/ tmp /是越來越有我測試,其產生的圖像的「微小」(和其他版本)填滿,測試繼續失敗,出現以下錯誤信息:

1)ImageFileUploader微小的版本應該縮小風景圖像是完全50 x 50像素

Failure/Error: @uploader = ImageFileUploader.new(@user, Factory(:image)) 
Excon::Errors::NotFound: 
    Expected(200) <=> Actual(404 Not Found) 
    request => {:expects=>200} 
    response => #<Excon::Response:0x0000010569f928 @body="", @headers={}, @status=404> 
# ./spec/uploaders/image_file_uploader_spec.rb:11:in `block (2 levels) in <top (required)>' 

我知道上面的意思是rspec的是沒有找到我的測試桶。任何人有任何想法我做錯了什麼?

將超級感謝任何新的線索。

更新:11年10月11日 文件上傳工作,但我搞定了如何讓圖像通過測試。在短期內,我將使用佔位符圖像來充實我的應用程序的其餘部分,並在稍後返回。一旦我弄清楚了,我會再發布一次更新。 (不過,如果您有任何見解,請留下任何想法。)

+0

你的'@ uploader.store!'應該存放一個目錄嗎?我會認爲這應該是一個特定的文件。 – Andrew

+0

@BenU我的答案解決了你的問題?請接受它,如果是這樣的話:-) –

回答

15

您是否試過這個?

  1. /app/uploaders/image_file_uploader.rb刪除storage :fog

  2. /config/initializers/carrierwave.rb添加了類似的配置塊生產爲你的測試和黃瓜,並設置config.storage = :fog那裏。

+0

這解決了一個相關的問題,由於上傳器的具體配置,而不是根據環境設置我的'存儲'配置。在我的情況下,我所有的上傳文件都是S3,所以我不需要將存儲配置放入上傳模型本身。謝謝! – jefflunt