2011-10-08 22 views
19

Robię aplikację rails 3.1, używając carrierwave do przesyłania plików do aws s3. Postępowałem zgodnie z instrukcjami na repozytorium github firmy carrierwave, a teraz mogę przesyłać pliki do mojego zasobu aws. To testy mnie utknęły. W ciągu ostatnich dwóch dni szukałem go i poprawiałem, używając wszystkich innych, które znalazłem, ale w końcu płaczę "mama". Oto co mam:rspec testowanie carrierwave - nowicjusz

/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 

Chociaż mój/public/uploads/tmp/jest uzyskiwanie wypełniona „małe” (i inne wersje) obrazów, których pokolenie Jestem testowania, testy nadal nie z następującym komunikatem o błędzie:

1) ImageFileUploader maleńka wersja powinna przeskalować w dół obrazu pejzaż być dokładnie 50 o 50 pikseli

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)>' 

wiem, że powyższe oznacza, że ​​rspec nie jest znalezienie moich testów wiadro. Ktoś myśli o tym, co robię źle?

byłby bardzo wdzięczny za wszelkie nowe kontakty.

UPDATE: 10/11/11 Przesyłanie plików działa, ale utknąłem w zastanawianiu się, jak uzyskać test obejmujący obrazy do przekazania. W krótkim czasie użyję obrazu zastępczego, gdy uzupełniam resztę mojej aplikacji i wrócę do tego później. Opublikuję dalszą aktualizację, gdy się zorientuję. (Jeśli jednak masz jakiekolwiek spostrzeżenia, zostaw wszelkie przemyślenia.)

+0

Czy Twój plik @ uploader.store powinien przechowywać katalog? Myślę, że to powinien być konkretny plik. – Andrew

+0

@BenU czy moja odpowiedź rozwiązała twój problem? Zaakceptuj to, jeśli tak :-) –

Odpowiedz

15

Czy próbowałeś tego?

  1. W /app/uploaders/image_file_uploader.rb usunąć storage :fog

  2. W /config/initializers/carrierwave.rb dodać podobny blok konfiguracyjny dla produkcji, jak masz na badania i ogórkiem oraz ustawić config.storage = :fog tam.

+0

Rozwiązałem związany z tym problem z powodu konfiguracji specyficznych dla uploadera, zamiast tylko konfigurować moją konfigurację 'storage' opartą na środowisku. W moim przypadku wszystkie moje przesłane pliki trafiały do ​​S3, więc nie musiałem umieszczać konfiguracji magazynu w samym modelu przesyłającego. Dzięki! – jefflunt

Powiązane problemy