Comment puis-je tester un upload de fichier dans les rails?
J'ai un contrôleur qui est responsable de l'acceptation des fichiers JSON et en traitant les fichiers JSON à faire de l'utilisateur maintenance de notre application. Dans les tests utilisateurs le téléchargement de fichiers et le traitement fonctionne, mais bien sûr, je voudrais automatiser le processus de vérification de l'utilisateur de maintenance lors de nos tests. Comment puis-je télécharger un fichier à un contrôleur dans le test fonctionnel cadre?
Vous devez vous connecter pour publier un commentaire.
Cherché cette question et ne pouvait pas le trouver, ou sa réponse sur un Débordement de Pile, mais le trouve ailleurs, je vais donc me demandant de le rendre disponible sur DONC.
Les rails de cadre a une fonction
fixture_file_upload
(Rails 2 Rails 3, Rails 5), qui sera à la recherche de vos appareils répertoire pour le fichier spécifié et le rendre disponible dans un fichier de test pour le contrôleur dans les tests fonctionnels. Pour l'utiliser:1) Mettez votre fichier sera téléchargé dans le test de vos appareils/les fichiers de sous-répertoire pour les tests.
2) Dans votre unité de test, vous pouvez obtenir votre fichier de test en appelant fixture_file_upload('path','mime-type").
par exemple:
bulk_json = fixture_file_upload('files/bulk_bookmark.json','application/json')
3) l'appel de la méthode post pour frapper le contrôleur de l'action que vous voulez, en passant de l'objet renvoyé par fixture_file_upload en tant que paramètre pour le téléchargement.
par exemple:
post :bookmark, :bulkfile => bulk_json
Ou dans les Rails 5:
post :bookmark, params: {bulkfile: bulk_json}
Ce sera exécutée par le biais de la simulation post-traitement à l'aide d'un fichier temporaire copie du fichier dans votre répertoire fixtures, puis retour à votre unité de test de sorte que vous pouvez commencer à examiner les résultats de la poste.
Mori réponse est bonne, sauf que dans Rails 3, au lieu de "ActionController::TestUploadedFile.nouveau", vous devez utiliser le "Rack::Test::UploadedFile.nouveau".
L'objet de fichier qui est créé peut alors être utilisé comme valeur de paramètre dans Rspec ou TestUnit tests.
Je pense que c'est mieux d'utiliser la nouvelle ActionDispatch::Http::UploadedFile de cette façon:
De cette façon, vous pouvez utiliser les mêmes méthodes que vous utilisez pour vos validations (comme par exemple tempfile).
De La Rspec Livre, B13.0:
Rails " propose une ActionController::TestUploadedFile classe qui peut être utilisé pour représenter un fichier téléchargé dans les params de hachage d'un contrôleur de spec, comme ceci:
Cette spécification suppose que vous avez un test_avatar.image png dans la spec/fixtures. Il faudrait que le fichier, de le télécharger sur le contrôleur,
et le contrôleur de créer et d'enregistrer un Utilisateur réel du modèle.
Vous souhaitez utiliser fixtures_file_upload. Vous mettez votre fichier de test dans un sous-répertoire du répertoire fixtures, puis passer dans le chemin d'accès à fixtures_file_upload. Voici un exemple de code, à l'aide de gabarit de chargement de fichier
Si vous utilisez par défaut rails de test avec les réglages d'usine fille. Beaux-code ci-dessous.
Remarque: vous devrez garder un mannequin image dans
/test/images/100_100.jpg
.Il fonctionne parfaitement.
Cheers!
si vous avez trouvé le fichier dans votre contrôleur avec le suivant
essayez les solutions suivantes dans votre specs:
Cela rendra le faux la méthode de "tempfile " méthode", qui sera de retour le chemin d'accès au fichier chargé.