2013-06-07 15 views
10

Zaimplementowałem przesyłanie plików nośnych do Amazon s3 tak jak w przypadku this Railscast.Testowanie przesyłania plików Carrierwave na s3 przy użyciu Capybara i Rspec

Mam jednak problem z testowaniem tego. Mogę załączyć plik do Capybara, ale kiedy kliknę przycisk, aby go załadować, nie przekierowuję do właściwej akcji. Sprawdziłem z save_and_open_page i zamiast tego wyświetla się strona główna.

Po przetestowaniu go w przeglądarce działa poprawnie, ale informacje o przesyłaniu s3 są dodawane do adresu URL (screenshot). Nie wiem, dlaczego to nie zadziałałoby w teście.

Oto kilka istotnych plików:

example_spec.rb - https://gist.github.com/leemcalilly/1e159f1b93005b8113f2

inicjalizatory/carrierwave.rb - https://gist.github.com/leemcalilly/924e8755f7c76ecbf5cf

modele/work.rb - https://gist.github.com/leemcalilly/cfda1a7f15d87dbab731

controllers/works_controller.rb - https://gist.github.com/leemcalilly/7fca5f2c81c6cb4de6bc

Jak mogę przetestować ten typ formy z kapibarą i rspec?

Odpowiedz

15

Ok, wymyśliłem to. Kluczem jest CarrierWaveDirect:

https://github.com/dwilkie/carrierwave_direct#using-capybara

Musiałem dodać tę linię do mojego spec_helper.rb:

include CarrierWaveDirect::Test::CapybaraHelpers

Wtedy moje testy potrzebne te CarrierWaveDirect dopasowujących:

attach_file_for_direct_upload("#{Rails.root}/spec/support/images/example.jpg") upload_directly(ImageUploader.new, "Upload Image")

Więc test końcowy mijania wygląda następująco:

it "creates a new work with a test image" do 
    client = FactoryGirl.create(:client) 
    work = FactoryGirl.build(:work) 
    visit works_path 
    attach_file_for_direct_upload("#{Rails.root}/spec/support/images/example.jpg") 
    upload_directly(ImageUploader.new, "Upload Image") 
    fill_in "Name", :with => work.name 
    select("2012", :from => "work_date_1i") 
    select("December", :from => "work_date_2i") 
    select("25", :from => "work_date_3i") 
    select(client.name, :from => "work_client_ids") 
    fill_in "Description", :with => work.description 
    fill_in "Service", :with => work.service 
    save_and_open_page 
    check "Featured" 
    click_button "Create Work" 
    page.should have_content("Work was successfully created.") 
end 

Musiałem także dodać do moich inicjalizatorów/carrierwave.rb:

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

Zamiast wyśmiewać odpowiedź mgły lub przetestować przesyłanie do s3, właśnie wyłączyłem przesyłanie do s3 w środowisku testowym.

+0

Tylko uwaga dla każdego, kto utknął jak ja i miał wszystko jak ta odpowiedź. Musiałem włączyć js w teście, aby działał. – rmaspero

Powiązane problemy