Wie kann ich einen Datei-Upload in Rails testen?
Habe ich einen controller ist verantwortlich für die Annahme von JSON-Dateien und dann die Verarbeitung der JSON-Dateien zu tun, einige Benutzer Wartung für unsere Anwendung. In user-Tests, die Datei-upload-und-Verarbeitung funktioniert, aber natürlich würde ich gerne automatisieren den Prozess der Prüfung der Benutzer-Wartung in unseren Tests. Wie kann ich eine Datei hochladen, um eine Steuerung im funktionalen testing framework?
InformationsquelleAutor der Frage animal | 2009-07-24
Du musst angemeldet sein, um einen Kommentar abzugeben.
Suchte für diese Frage und konnte es nicht finden, oder die Antwort auf Stack Overflow gefunden, aber Sie es an anderer Stelle, daher bitte ich, zur Verfügung stellen.
Das rails-framework hat eine Funktion fixture_file_upload (Rails 2 Rails 3Schienen 5), die Suche nach Ihrem Leuchten-Verzeichnis für die Datei angegeben und es wird als test-Datei für den controller in funktionaler Tests. Um es zu nutzen:
1) Legen Sie Ihre Datei hochgeladen werden, die im test in Ihrer Befestigungen/Dateien Unterverzeichnis für die Prüfung.
2) In der unit-test können Sie Ihre Test-Datei durch den Aufruf fixture_file_upload('path','mime-Typ').
z.B.:
bulk_json = fixture_file_upload('files/bulk_bookmark.json','application/json')
3) Aufruf der post-Methode zu schlagen, die controller-Aktion, die Sie wollen, übergeben Sie das zurückgegebene Objekt durch fixture_file_upload als parameter für den upload.
z.B.:
post :bookmark, :bulkfile => bulk_json
Oder in Schienen 5:
post :bookmark, params: {bulkfile: bulk_json}
Diese wird durch die simulierten post-Prozess mit einer Tempfile Kopie der Datei in Ihrem Gerät Verzeichnis und dann kehren Sie zu Ihrem unit-test, so dass Sie beginnen können, die Untersuchung der Ergebnisse der post.
InformationsquelleAutor der Antwort animal
Mori s Antwort ist richtig, außer dass in Rails 3 statt der "ActionController::TestUploadedFile.der neue" du " - Rack::Test::UploadedFile.neuen".
Das file-Objekt, das erstellt wird, kann dann verwendet werden, wie ein parameter-Wert in Rspec oder TestUnit tests.
InformationsquelleAutor der Antwort Victor Grey
Ich denke, es ist besser, das neue ActionDispatch::Http::UploadedFile diese Weise:
Diese Weise können Sie die gleichen Methoden, die Sie verwenden in Ihrem Validierungen (wie zum Beispiel tempfile).
InformationsquelleAutor der Antwort David Morales
Aus Der Rspec Book, B13.0:
Schienen " bietet einen ActionController::TestUploadedFile Klasse, die verwendet werden können, repräsentieren eine hochgeladene Datei in die params-hash eines controller-Spezifikation, wie diese:
Diese Skillung würde erfordern, dass Sie eine test_avatar.png-Bild in der spec/fixtures-Verzeichnis. Es würde dauern, die Datei, laden Sie Sie auf den controller,
und den controller erstellen und speichern Sie ein real-User-Modell.
InformationsquelleAutor der Antwort Mori
Den Sie verwenden möchten fixtures_file_upload. Sie setzen Ihre test-Datei in einem Unterverzeichnis der Spiele-Verzeichnis und übergeben Sie dann in den Pfad zu fixtures_file_upload. Hier ist ein Beispiel-codemit fixture-Datei hochladen
InformationsquelleAutor der Antwort Rob Di Marco
Wenn Sie mit Standard-Schienen-test mit factory girl. Feine untenstehenden code.
Hinweis: Sie müssen halten ein dummy-Bild in
/test/images/100_100.jpg
.Funktioniert es perfekt.
Prost!
InformationsquelleAutor der Antwort Manish Shrivastava
wenn Sie die Datei in Ihrer Steuerung mit den folgenden
dann versuchen Sie das folgende in Ihre specs:
Damit wird der fake-Methode 'tempfile' - Methode, die zurückkehren wird der Pfad zu der geladenen Datei.
InformationsquelleAutor der Antwort Esenbek Kydyr uulu