6 votes

Rails rspec test de contrôleur vs test d'intégration

Je viens de terminer l'écriture d'une intégration rspec capybara détaillée et de tests unitaires pour une application Rails, qui comprend la simulation de la connexion Omniauth (twitter), le remplissage de formulaires, la validation des données, etc. Cependant, je me demande s'il est nécessaire d'écrire un contrôleur séparé ou un test fonctionnel.

J'apprécierais votre contribution et tout lien vers d'autres lectures, etc.

12voto

Bryce Points 915

Je vais me faire l'avocat du diable, car je sais que je suis probablement minoritaire dans cette opinion : Je préfère en fait faire des tests de contrôleurs extrêmement poussés. Pour quelques raisons :

1) Je trouve qu'il est plus facile de tester systématiquement chaque chemin et chaque résultat au niveau du contrôleur qu'au niveau des tests d'intégration. Mes tests d'intégration se limitent principalement aux chemins heureux et à certains des chemins d'erreur les plus courants.

2) Un grand nombre de problèmes de sécurité potentiels se produisent au niveau du contrôleur. Des tests approfondis me permettent de m'assurer que rien de malveillant ne peut atteindre la logique de mon modèle.

3) C'est subjectif, mais cela m'oblige vraiment à réfléchir à certains des chemins de longue traîne par lesquels ma demande pourrait passer. Que se passe-t-il si quelqu'un essaie d'introduire un jeton de réinitialisation de mot de passe invalide dans l'URL ? Les tests de contrôleurs me permettent d'envisager toutes les options.

4) Contrairement aux tests d'intégration, ils sont assez simples à tester. Chaque action est juste une méthode ruby !

6voto

rainkinz Points 3419

Personnellement, je pense que si votre spécification de demande (intégration) exerce tous les chemins de code, vous êtes couvert. Ryan Bates a un excellent Railscast sur la façon dont il teste ici : http://railscasts.com/episodes/275-how-i-test?autoplay=true et vers 5:05, il dit une chose similaire. Comme vous, j'aime écrire des tests d'intégration plutôt que des spécifications de contrôleur. La plupart du temps, les contrôleurs ne font que présenter des opérations de type CRUD (surtout si vous faites attention à garder la logique de domaine en dehors du contrôleur), donc tout ce que vous testez est l'échafaudage.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X