Je travaille sur une API Rails et je prévois maintenant d'écrire des tests RSpec pour les contrôleurs. J'ai lu et je n'ai pas été en mesure de comprendre ce que le la différence réelle entre les spécifications du contrôleur et les spécifications de la demande est celle que je devrais probablement utiliser si je teste une API.
Spécifications du contrôleur - Une spécification de contrôleur est un wrapper RSpec pour un test fonctionnel Rails. Il vous permet de simuler un seul demande http dans chaque exemple, puis spécifiez les résultats attendus
Spécifications de la demande - Les spécifications de la demande fournissent une enveloppe fine autour des tests d'intégration de Rails et sont conçues pour conduire le comportement à travers la pile complète, y compris le routage (fourni par Rails ) et sans écraser (c'est à vous de décider).
Donc, si vous voulez tester des contrôleurs API, je recommanderais d'utiliser Controller specs
lorsque vous testez des requêtes uniques.
Rails 5 a amélioré la vitesse et le réalisme des spécifications de requête par rapport à Rails version 4 du contrôleur et des spécifications de requête. La recommandation officielle de l'équipe Rails et du noyau RSpec est d'écrire des spécifications de demande à la place (des spécifications du contrôleur) .
En effet, l'équipe RSpec déclare officiellement que les spécifications du contrôleur sont désormais obsolètes .
http://rspec.info/blog/2016/07/rspec-3-5-has-been-released/
Pour les nouvelles applications Rails: nous ne recommandons pas d'ajouter la gemme de test du contrôleur Rails à votre application. La recommandation officielle de l'équipe Rails et RSpec L'équipe principale doit écrire des spécifications de demande à la place. Les spécifications de demande vous permettent de vous concentrer sur une seule action de contrôleur, mais contrairement aux tests de contrôleur impliquant le routeur, la pile du middleware et les demandes et réponses du rack. Cela ajoute du réalisme au test que vous écrivez et permet d'éviter de nombreux problèmes courants dans les spécifications du contrôleur. Dans Rails 5, les spécifications de la demande sont beaucoup plus rapides que les spécifications de la demande ou du contrôleur étaient dans Rails = 4, grâce au travail d'Eileen Uchitelle1 de la Rails Committer Team.
Citant Aaron Sumner:
Les équipes Rails et RSpec suggèrent de remplacer ou de supprimer les tests de contrôleur de votre application (également connus sous le nom de couche de test fonctionnel), en faveur de tests directs de modèles (unités) ou de tests d'intégration de niveau supérieur. .
Pour une nouvelle API, je préfère utiliser la spécification de la demande et atteindre mes "points finaux" (aka Modèles et logique métier) plutôt que d'utiliser des tests de contrôleur.