2013-06-07 18 views
10

Ho implementato upload di file carrierwave su Amazon s3 proprio come in this Railscast.Test di upload di file Carrierwave su s3 con Capybara e Rspec

Ho problemi a testare questo però. Posso allegare un file con Capybara, ma quando faccio clic sul pulsante per caricarlo non reindirizza all'azione corretta. Ho controllato con save_and_open_page e invece sta visualizzando la homepage.

Quando eseguo il test nel browser, funziona correttamente, ma le informazioni sul caricamento s3 vengono aggiunte all'URL (screenshot). Non so perché questo non avrebbe funzionato nel test.

Ecco alcuni file in questione:

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

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

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

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

Come posso testare questo tipo di forma con capibara e rspec?

risposta

15

Ok, l'ho capito. La chiave è CarrierWaveDirect:

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

avevo bisogno di aggiungere questa linea al mio spec_helper.rb:

include CarrierWaveDirect::Test::CapybaraHelpers

Poi i miei test necessari questi CarrierWaveDirect matchers:

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

Così il test di passaggio finale è simile al seguente:

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 

Ho anche bisogno di aggiungere questo ai miei inizializzatori/carrierwave.rb:

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

Invece di deridere la risposta alla nebbia, o testare un upload per s3, ho appena spento i caricamenti su s3 nell'ambiente di test.

+0

Solo un appunto per chiunque sia rimasto bloccato come me e abbia avuto tutto come questa risposta. Ho dovuto abilitare js sul test per farlo funzionare. – rmaspero

Problemi correlati