En travaillant sur notre nouvelle création en Ruby on Rails, je rencontre un problème lors de l’élaboration des tests. Voici la problématique : Lorsqu’un formulaire comporte la possibilité de télécharger un fichier sur le serveur comment ce processus peut-il être testé ? Réponse #1 : On ouvre le fichier normalement puis on passe le fichier dans le POST du contrôleur. Hiinn ! Mauvaise réponse ! Un fichier ouvert
de cette manière manque une propriété importante qui est original_filename, et donc votre code ne fonctionnera pas. Donc avec l’aide de Jean-Marc on effectue une recherche dans la librairie CGI qui est responsable de la gestion des fichiers envoyés par POST. Réponse #2 : Dans notre test, on dérive la classe FILE de la même manière que dans la librairie CGI, puis on passe ce nouveau type de fichier dans le POST.Hiinn ! Mauvaise réponse ! Ça fonctionne mais l’ajout de ce traitement dans notre test est assez inélégant et répète de la fonctionnalité déjà existante. Une heure plus tard d’arrachage de cheveux, Jean-Marc me lance la phrase suivante de manière désinvolte: « Sais-tu que dans ActionController il y a une classe nommée TestUploadedFile ? »
« Ah bien non je ne la connaissais pas. Dis moi pas qu’il y a une propriété original_filename quand même ? », que je lui rétorque en proliférant quelques blasphèmes parce que je suis sûr que ça va faire fonctionner mon test à merveille. Et bien sur Jean-Marc de répondre en prenant bien soin d’asséner le coût de grâce : « Bien oui. Essaye je suis sûr que ça marchera. » En 5 minutes ça fonctionne. Et voila 1 heure et demie de travail pour rien. Problème réglé et les tests sont maintenant fonctionnels. Morale de l’histoire, lisez votre document de temps à autre, vous ferez de bonne découverte.