Je suis plutôt sympathique à votre point de vue ici. J'aime Concombre et J'aime RSpec - et je les utilise tous les deux, mais pas toujours sur le même code. Par exemple, j'écris rarement des exemples RSpec pour les contrôleurs Rails ces jours-ci, et je n'écris presque jamais les spécifications de vue. La plupart de mes contrôleurs sont très similaires et ne s'écartent pas beaucoup du modèle de contrôleur "stock" - qui est déjà bien testé par les tests unitaires de Rails. Vérifier à nouveau le même comportement ne gagne pas grand-chose pour le temps qu'il faut et les tracas de se moquer de tous les modèles. Avec le concombre au niveau de l'intégration, je peux passer cette moquerie et obtenir la vérification essentielle que je recherche. La plupart du temps, les tests de vue sont traités de manière beaucoup plus transparente dans le concombre. (Ensuite, je devrais voir "foo" et ainsi de suite.)
Mais cela ne veut pas dire que je n'utilise pas beaucoup RSpec dans Rails. Je l'utilise pour les endroits où vit ma logique: les modèles, les filtres de contrôleur, et les aides de vue. J'ai également un couple de projets qui sont presque tous logique métier, par exemple. bibliothèques ou adaptateurs d'API sur des interfaces tierces complexes. Pour ceux que je me trouve habituellement en utilisant RSpec exclusivement et en sautant le concombre.
En heuristique, je vous suggère que vous fortement envisager d'écrire un test unitaire tout moment l'une des questions suivantes peut répondre par « oui »:
- est le code que je vous écris plus que trivialement compliqué?
- Est-ce que ce code existe principalement pour donner des réponses à d'autres codes?
- Ce code existe-t-il que je refaçonne (qui n'a pas encore de test unitaire)?
- Ai-je trouvé un bogue dans ce code? (Si c'est le cas, écrivez un test unitaire avant de le réparer pour qu'il ne se faufile plus jamais.)
- Dois-je penser pendant plus de dix secondes à la façon la plus élégante d'implémenter ce code?
- Est-ce que mon picotement Spidey Sense?
Si aucune de ce qui précède est vrai, alors peut-être vous pouvez vous contenter de faire juste des tests d'intégration. Encore une fois, il y a beaucoup de cas où c'est raisonnable. Mais si vous rencontrez des problèmes plus tard, soyez prêt à payer le prix - et ce prix devrait inclure l'écriture de tests unitaires à tout moment si elles semblent nécessaires.
Merci Sarah. Jusqu'à présent, non. C'est une application web simple - délibérément simple. À moins que je ne construise du code qui n'est pas exercé par l'interface HTML, je suppose que WebRat est suffisant? Et si je finis par construire du code qui n'est pas exercé par l'interface HTML, j'imagine qu'un test d'intégration (évidemment pas WebRat) sera suffisant? Ou y a-t-il un réel besoin de tester chaque unité séparément en plus de les tester à travers des tests d'intégration? –
Cela dépend de vos objectifs. Si vous utilisez des tests comme un filet de sécurité pour le refactoring, ou comme un moyen d'attraper des bogues lorsque vous ajoutez du code, alors vous aurez toujours besoin de tests unitaires. Aucun ensemble de tests ne testera jamais tout, alors oui, vous aurez ce qui ressemble à des tests redondants. –