Ich habe nach dieser Frage gesucht und konnte sie oder ihre Antwort auf Stack Overflow nicht finden, habe sie aber an anderer Stelle gefunden. Deshalb bitte ich sie, sie auf SO verfügbar zu machen.
Das Rails-Framework verfügt über eine Funktion fixture_file_upload
( Rails 2 Rails 3 , Rails 5 ), die Ihr Fixtures-Verzeichnis nach der angegebenen Datei durchsucht und diese als Testdatei für den Controller beim Funktionstest zur Verfügung stellt. Um es zu benutzen:
1) Fügen Sie Ihre hochzuladende Datei zum Testen in das Unterverzeichnis Ihrer Geräte / Dateien zum Testen ein.
2) In Ihrem Unit-Test können Sie Ihre Testdatei abrufen, indem Sie fixture_file_upload ('path', 'mime-type') aufrufen.
z.B:
bulk_json = fixture_file_upload('files/bulk_bookmark.json','application/json')
3) Rufen Sie die post-Methode auf, um die gewünschte Controller-Aktion auszuführen, und übergeben Sie das von fixture_file_upload zurückgegebene Objekt als Parameter für den Upload.
z.B:
post :bookmark, :bulkfile => bulk_json
Oder in Rails 5: post :bookmark, params: {bulkfile: bulk_json}
Dies durchläuft den simulierten Post-Prozess mit einer Tempfile-Kopie der Datei in Ihrem Fixtures-Verzeichnis und kehrt dann zu Ihrem Komponententest zurück, damit Sie mit der Prüfung der Ergebnisse des Posts beginnen können.
Moris Antwort ist richtig, außer dass Sie in Rails 3 anstelle von "ActionController :: TestUploadedFile.new" "Rack :: Test :: UploadedFile.new" verwenden müssen.
Das erstellte Dateiobjekt kann dann als Parameterwert in Rspec- oder TestUnit-Tests verwendet werden.
quelle
Ich denke, es ist besser, das neue ActionDispatch :: Http :: UploadedFile folgendermaßen zu verwenden:
Auf diese Weise können Sie dieselben Methoden verwenden, die Sie in Ihren Validierungen verwenden (z. B. tempfile).
quelle
Aus dem Rspec-Buch, B13.0:
Rails 'bietet eine ActionController :: TestUploadedFile-Klasse, mit der eine hochgeladene Datei im Parameter-Hash einer Controller-Spezifikation dargestellt werden kann:
Diese Spezifikation würde erfordern, dass Sie ein test_avatar.png-Image im Verzeichnis spec / fixtures haben. Es würde diese Datei nehmen, sie auf den Controller hochladen und der Controller würde ein echtes Benutzermodell erstellen und speichern.
quelle
Sie möchten fixtures_file_upload verwenden . Sie legen Ihre Testdatei in einem Unterverzeichnis des Fixtures-Verzeichnisses ab und übergeben den Pfad an fixtures_file_upload. Hier ist ein Beispiel für Code beim Hochladen von Fixture-Dateien
quelle
Wenn Sie Standardschienen verwenden, testen Sie mit Factory Girl. Gut unter dem Code.
Hinweis: Sie müssen ein Dummy-Bild behalten
/test/images/100_100.jpg
.Es funktioniert perfekt.
Prost!
quelle
Wenn Sie die Datei in Ihrem Controller wie folgt erhalten
Versuchen Sie dann Folgendes in Ihren Spezifikationen:
Dadurch wird die gefälschte Methode zur 'tempfile'-Methode, die den Pfad zur geladenen Datei zurückgibt.
quelle