2010-11-23 3 views
3

Je voudrais commencer à utiliser RSpec pour écrire des tests pour mon application Rails, mais j'ai testé beaucoup de tests en utilisant Test :: Unit. Je voudrais continuer à être en mesure d'exécuter tous les tests (ou tous les tests unitaires, tests fonctionnels, etc.) simplement de la ligne de commande, avec quelque chose commeComment intégrer RSpec avec Rake, Rails et mes tests existants?

rake test:units 

ou autre, et avoir exécuter tous les tests unitaires, qu'ils soient écrits avec Test :: Unit ou RSpec. Et je ne veux définitivement pas perdre mon temps à convertir mes tests existants en RSpec; c'est un non-démarreur.

À l'heure actuelle, je pense que mes tests RSpec devraient exister à côté de mes tests existants, en test/unité, test/fonctionnel, etc. Quelle est la meilleure façon d'y parvenir? Ou est-ce même une bonne idée? C'est, je suis assez nouveau à RSpec (et Ruby et Rails, d'ailleurs), alors peut-être que c'est une meilleure pratique pour garder les RSpecs séparés. Peu importe où ils sont stockés sur le système de fichiers, cependant, je devrai être capable d'exécuter tous les tests avec une seule tâche de rake, et je devrai collecter des numéros de couverture de code pour le corpus de test entier en utilisant rcov, Je fais déjà avec mes tests existants.

Répondre

6

Modifier: Correction de certaines fausses instructions sur la structure du répertoire Rspec rails.


Rspec met généralement ses tests dans une structure de répertoire distinct, spec/, qui ressemble à ceci:

spec/ 
├── controllers 
│   ├── pages_controller_spec.rb 
│   └── users_controller_spec.rb 
├── helpers 
│   ├── pages_helper_spec.rb 
│   └── users_helper_spec.rb 
├── models 
│   └── user_spec.rb 
├── spec_helper.rb 
└── views 
    ├── pages 
    │   └── home.html.haml_spec.rb 
    └── users 
     ├── index.html.haml_spec.rb 
     └── show.html.haml_spec.rb 

Il a un répertoire distinct pour les modèles, les contrôleurs et points de vue. Je ne suis pas sûr exactement comment Test :: Unit structure ses répertoires, mais c'est la structure de répertoire par défaut pour Rspec. Notez le fichier spec_helper.rb. Ce fichier indique à Rspec où rechercher les spécifications et dispose de quelques autres options de configuration. Votre meilleur pari est probablement juste de suivre les meilleures pratiques de rspec pour avoir un répertoire spec, et de faire votre propre tâche de rake qui exécute à la fois les tests unitaires et les tests rspec. Quelque chose comme ceci:

task :run_tests do 
    system("rspec spec/") 
    system("rake test:units") 
end 

Ceci exécutera vos tests rspec puis votre test :: Les tests unitaires à son tour.

+0

Cela signifie-t-il que je ne devrais pas utiliser RSpec pour créer des tests unitaires et des tests fonctionnels? Essentiellement, votre réponse me dit que les tests rspec sont un type de test distinct. De plus, avec ce système d'organisation, il semble qu'il n'y ait aucun moyen de séparer les tests rspec qui testent seulement une seule unité de ceux qui servent de tests fonctionnels ou d'intégration plus importants. J'aimerais pouvoir maintenir ce niveau de séparation dans mes tests. Avoir une seule catégorie de tests n'est pas acceptable pour les grands projets comme celui sur lequel je travaille. – Jeff

+0

Les tests Rspec qui testent uniquement votre contrôleur ou votre modèle sont des tests unitaires, s'ils sont bien exécutés. Ils peuvent tester tout ce que vous voulez qu'ils testent. Lorsque vous installez rspec_rails, il suppose que vous souhaitez tester vos modèles, vues, contrôleurs et aides en tant qu'unités. Cependant, vous pouvez également créer plus de tests pour servir de tests fonctionnels. Vous n'êtes pas limité aux répertoires créés par Rspec. Vous pouvez facilement créer un répertoire "fonctionnel" et y mettre tous vos tests fonctionnels. – jergason

Questions connexes