2010-10-19 11 views
11

Ich versuche, Spezifikationen für eine funktionierende Datei Upload-Funktionalität mit attachment_fu schreiben. Der vom Autor für den Test angegebene Beispielcode erfordert jedoch, dass ich action_controller/test_process anfordern muss, damit ich Zugriff auf ActionController::UploadedStringIO Klasse habe. Ich habe dies zuvor in Schienen 2.x verwendet, aber für Schienen 3 kann es die Datei test_process nicht finden.attachment_fu testing in rails 3

Wie kann ich die Datei-Upload-Funktionalität in Rails 3 testen?

Antwort

23

Ich konnte Fixture_file_upload nur gut mit Rails3 und Rspec verwenden.

Habe ich nur noch include ActionDispatch::TestProcess zum spec_helper.rb, und dann als FILEDATA in etwa wie folgt gefasst:

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

EDIT: Etwas, was ich verändert das Verhalten dieses Upgrade auf immer den Pfad Spiele, so Ich habe statt fixture_file_upload:

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

+1 für den letzten Kommentar zur Verwendung von 'Rack :: Test :: UploadedFile.new'! mit 'include ActionDispatch :: TestProcess' habe ich irgendwie merkwürdiges Verhalten mit Fabrikmädchen bekommen ... – gingerlime

4

Ich arbeite gerade an dem Testen von Datei-Uploads in Rails 3, obwohl ich nicht weiß, wie hilfreich meine Antwort sein wird. Wäre es möglich, dass Sie den Test ändern? Persönlich verwende ich einen Gurken-/Capybara-Ansatz. Capybara DSL definiert

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

persönlich dies eine bessere Art und Weise mit dem StringIO Objekt zu testen scheint als die Interaktion ... fühlen sich frei zu entgegnen. Diese

3

war etwas schwierig für Rails 3

Sie noch die fixture_file_upload Funktion können Sie zu finden, aber man muss hinzufügen:

include ActionDispatch::TestProcess

Um Ihre Testfall.

Das hat mit Rspec überhaupt nicht funktioniert. Ich musste einfach die Datei selbst packen und die Datei direkt posten.