J'ai recherché cette question et je n'ai pas pu la trouver, ni sa réponse sur Stack Overflow, mais je l'ai trouvée ailleurs, je demande donc de la rendre disponible sur SO.
Le framework rails a une fonction fixture_file_upload
( Rails 2 Rails 3 , Rails 5 ), qui recherchera dans votre répertoire fixtures le fichier spécifié et le rendra disponible comme fichier de test pour le contrôleur lors des tests fonctionnels. Pour l'utiliser:
1) Mettez votre fichier à télécharger dans le test dans votre sous-répertoire fixtures / files pour le test.
2) Dans votre test unitaire, 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) appelez la méthode post pour atteindre l'action du contrôleur que vous souhaitez, en passant l'objet retourné par fixture_file_upload comme paramètre pour le téléchargement.
par exemple:
post :bookmark, :bulkfile => bulk_json
Ou dans Rails 5: post :bookmark, params: {bulkfile: bulk_json}
Cela passera par le post-processus simulé en utilisant une copie Tempfile du fichier dans votre répertoire fixtures, puis reviendra à votre test unitaire afin que vous puissiez commencer à examiner les résultats de la publication.
La réponse de Mori est correcte, sauf que dans Rails 3 au lieu de "ActionController :: TestUploadedFile.new", vous devez utiliser "Rack :: Test :: UploadedFile.new".
L'objet fichier créé peut ensuite être utilisé comme valeur de paramètre dans les tests Rspec ou TestUnit.
la source
Je pense qu'il est préférable d'utiliser le nouveau ActionDispatch :: Http :: UploadedFile de cette façon:
De cette façon, vous pouvez utiliser les mêmes méthodes que vous utilisez dans vos validations (comme par exemple tempfile).
la source
Extrait du livre Rspec, B13.0:
Rails 'fournit une classe ActionController :: TestUploadedFile qui peut être utilisée pour représenter un fichier téléchargé dans le hachage de paramètres d'une spécification de contrôleur, comme ceci:
Cette spécification nécessiterait que vous ayez une image test_avatar.png dans le répertoire spec / fixtures. Il prendrait ce fichier, le téléchargerait sur le contrôleur, et le contrôleur créerait et enregistrerait un modèle utilisateur réel.
la source
Vous souhaitez utiliser fixtures_file_upload . Vous placerez votre fichier de test dans un sous-répertoire du répertoire fixtures puis passerez le chemin vers fixtures_file_upload. Voici un exemple de code , utilisant le téléchargement de fichier de fixture
la source
Si vous utilisez des rails par défaut, testez avec Factory Girl. Bien en dessous du code.
Remarque: vous devrez conserver une image factice au format
/test/images/100_100.jpg
.Cela fonctionne parfaitement.
À votre santé!
la source
si vous obtenez le fichier dans votre contrôleur avec les éléments suivants
puis essayez ce qui suit dans vos spécifications:
Cela transformera la fausse méthode en méthode «tempfile», qui renverra le chemin vers le fichier chargé.
la source