Rails ça rox ! Mais comme pour tout, il faut correctement l’utiliser.
Et pour cela, il faut faire des test. Pas manuels, mais automatiques. Je vous laisse découvrir cela.

Cependant il y a certaines choses qui ne sont pas forcément pratiques à tester, tel que l’envoi d’un fichier.
Vous avez besoin d’un objet spécial toussa. Pas bien difficile dans l’idée. Mais tellement chiant pour un bon fainéant comme moi ;-)

Si vous avez lu l’article donné plus haut, vous avez vu la page « Testing Files Upload » qui, fonctionne bien.
Ou presque, malheureusement.
En effet l’attribut content_type est, dans « la vraie vie », modifiable. Et ici, il est disponible uniquement en lecture. C’est bête, ça fait planter votre test alors que l’application fonctionne bien.

Mais il y a une solution heureusement ! La voici :)
En cherchant un peu, j’ai découvert que Rails propose une méthode permettant de tester l’envoi de fichier, méthode qui est disponible en interne.

ActionController::TestUploadedFile.new(Test::Unit::TestCase.fixture_path + 'myfile.jpeg', content_type)

Ok, cool. Si vous testez cela déjà, vous constaterez que vous avez correctement votre objet pour tester le fichier envoyé. Super !
Seulement vous ne pouvez toujours pas modifier la valeur de content_type. Alors que l’objet retourné par un vrai fichier envoyé le permet.

Allons donc un petit peu hacker Rails.
Ouvrez le fichier RUBY_PATH/gems/1.8/actionpack-2.0.2/action_controller/test_process.rb

Puis cherchez la déclaration de la class TestUploadedFile
La, vous verrez la ligne suivante :
attr_reader :content_type

Nous avons donc l’attribut content_type en lecture. Passons le en lecture-écriture :
attr_accessor :content_type

Et hop ! Vous pouvez maintenant tester votre envoi de fichier tout en modifiant le content_type :)
Et moi dès que j’aurai trouvé un client GIT potable sous Windows, je pourrais proposer le hack à l’équipe de développement de Rails.

[Edit : Après avoir récupéré la dernière nightly build de Rails, le bug du attr_accessor a été corrigé. Si vous avez la dernière version de Rails, il n'est donc pas utile de faire cela]

3 Réponses à “Rails : tester l'envoi de fichier”

  1. Pada dit :

    Great :-)
    Sinon très joli ce nouveau thème, tu as trouvé ça où ?

  2. Damien dit :

    Le thème est de smashing magazine. Apparemment, le peu de contraste entre le texte et le fond empêchait certaines personnes de lire ;)

  3. Blankoworld dit :

    Bon je vais pas trop pourrir le site avec mes commentaires miteux, mais je viens de trouver l’adresse du thème utilisé ici (peut être que le lien était ici même mais bon) : http://www.smashingmagazine.com/2008/08/20/notepad-chaos-a-free-wordpress-theme/ .

    Sinon j’ai hâte d’avoir du temps pour mettre à plat l’histoire des tests sous Ruby On Rails et ainsi avoir la possibilité de tester l’astuce que tu nous donnes ici.

    Continue ainsi, je suis heureux de toujours pouvoir en savoir plus sur Ruby On Rails, même si je ne peux pas tout tester. Au moins cela se grave dans la mémoire, et le jour où nous en avons besoin on saura où le trouver !

Laisser une réponse

 
Fork me on GitHub