2010-10-19 9 views
11

Sto provando a scrivere le specifiche per una funzionalità di caricamento di file di lavoro usando attachment_fu. Tuttavia, il codice di esempio fornito dall'autore per il test mi richiede di richiedere action_controller/test_process in modo che possa accedere alla classe ActionController::UploadedStringIO. Ho usato questo prima in rails 2.x ma per rails 3, non riesce a individuare il file test_process.attachment_fu testing in rail 3

Come faccio a testare la funzionalità di caricamento file in rails 3?

risposta

23

Sono stato in grado di utilizzare fixture_file_upload perfettamente con Rails3 e rspec.

ho solo aggiunto include ActionDispatch::TestProcess al spec_helper.rb e poi fatto passare qualcosa come il seguente come FILEDATA:

fixture_file_upload(Rails.root.join("spec/support/test.png"), 'image/png') 

EDIT: Ho aggiornato Qualcosa è cambiato il comportamento di questo per includere sempre il percorso di infissi, in modo sono passato a questo invece di fixture_file_upload:

Rack::Test::UploadedFile.new(Rails.root.join("spec/support/test.png"), 'image/png') 
+1

+1 per l'ultimo commento sull'uso 'Rack :: test :: UploadedFile.new'! con 'include ActionDispatch :: TestProcess' In qualche modo stavo facendo strani comportamenti con la factory girl ... – gingerlime

4

Sto lavorando per testare i caricamenti di file in rails 3 in questo momento, anche se non so quanto sia utile la mia risposta. Sarebbe possibile per te cambiare il test? Personalmente, sto usando un approccio Cucumber/Capybara. DSL di Capybara definisce

attach_file('Image', '/path/to/image.jpg') 

Personalmente questo sembra un modo migliore per testare che interagire con l'oggetto StringIO ... sentitevi liberi di ribattere.

3

Questo era un po 'difficile da trovare per Rails 3

È comunque possibile utilizzare la funzione fixture_file_upload, ma bisogna aggiungere:

include ActionDispatch::TestProcess

Per il vostro banco di prova.

Questo non ha funzionato affatto con Rspec. Ho appena dovuto prendere il file stesso e postare direttamente il file.