Bonjour, Suite au podcast Parlons Ruby avec Jean-michel Garnier ( http://parlonsruby.com/pr006comment-je-teste-avec-jean-michel-garnier/ ), j'ai voulu avoir un retour d'expérience de personne ayant réussi ce genre de technique.
De plus en plus, les développeurs rails commence à avoir une couche "service" qui permet de limiter son controller et ses models. Un Thin Controller / Thin Model. De plus dans une logique compléte de test, il est conseiller de faire du fast test. Le require de rails prenant pas moins de 5 secondes, il peut être interessant de l'éviter. Pareil pour les accés en BDD qui prendre quelque 100aine de milliseconde en plus. Je suis moi en train de commencer cette démarche. Mais je me heurte assez vite à un problème. C'est que ma couche service étant tellement lié à ma couche model que je dois très vite require 1 ou plusieurs models. De même, si je ne require pas ces models et ne passe que par des mocks, je me retrouve à avoir un test qui ne comprend que des stub pour verifier que ma methode appele bien les methodes de mes objets. Donc l'intérêt est très faible car aucune valeur ajoutée. Pour expliquer cela rien ne vaut mieux que du code. Cas simple, mais qui peut être globalement correcte. J'ai une class UserCreate qui me permet de créer un utilisateur avec son adresse. https://gist.github.com/4691019/9d449582d9522e867ea4af6dfe4d6e66965c1041#file-user_create-rb On commence ensuite à lui mettre les specs adéquates ( bien sur il faut le faire avant ) https://gist.github.com/4691019/ed7a66f305002177bd8abf68f8885234507f02a4#file-user_create_without_model_require_spec-rb Avec ce genre de test, je change un tout petit peu mon implémentation dans ma classe et je dois la changer dans mon test. Je stub 80% des methodes appeler par ma classe. Personnelement, je ne trouve pas cela utile. Donc, on se dit qu'il faut stuber uniquement la persistence en BDD. On obtient ainsi le test suivant : https://gist.github.com/4691019#file-user_create_with_stub_persistence_spec-rb On require un peu plus de chose car on require 3 nouveaux fichier dans notre exemple, mais on limite globalement la persistence, mais sans aucune certitude de persistence réel sans compter le cas ou demain l'API de notre objet User change. Enfin on arrive à la solution "bourrine" le test d'integration : https://gist.github.com/4691019#file-user_create_integration_spec-rb Cette fois-ci on est sur que notre objet est persisté. Par contre il faut avoir require toute la stack rails. Le test est plus long à executer et le require aussi. Je voulais avoir des retours sur ces 3 exemples. Doit-on tester le 3 ? juste 2 et 3, ou juste 1 et 3 ? Je suis actuellement dans de grande phase de réflexion de ce coté là, car je n'arrive pas à me décider sur le bon process. Je suis ouvert à tous commentaires. Merci -- Cyril Mougel http://blog.shingara.fr -- -- Vous avez reçu ce message, car vous êtes abonné au groupe "Railsfrance" de Google Groups. Pour transmettre des messages à ce groupe, envoyez un e-mail à l'adresse [email protected] Pour résilier votre abonnement envoyez un e-mail à l'adresse [email protected] --- Vous recevez ce message, car vous êtes abonné au groupe Google Groupes Railsfrance. Pour vous désabonner de ce groupe et ne plus recevoir d'e-mails le concernant, envoyez un e-mail à l'adresse [email protected]. Pour plus d'options, visitez le site https://groups.google.com/groups/opt_out .
