10 secondes c'est un temps très long pour un seul test à exécuter. Mon sentiment profond est que votre spec cible est en cours d'exécution à la fois de l'unité et de l'intégration tests en même temps. C'est une chose typique que les projets de l'automne et à un certain stade, vous aurez besoin pour surmonter cette dette technique si vous voulez produire plus, plus vite. Il y a un certain nombre de stratégies qui peuvent vous aider à le faire... et je vais vous recommander quelques-uns que j'ai utilisé dans le passé.
1. Unité Séparée De Tests D'Intégration
La première chose que je voudrais faire est de séparer l'unité à partir de tests d'intégration. Vous pouvez le faire soit par:
- Déplacer (dans des dossiers distincts en vertu de la spécification d'annuaire) - et la modification de l'angle d'attaque des cibles
- Leur marquage (rspec vous permet de marquer vos tests)
La philosophie va, que vous voulez que votre régulière construit pour être rapide, sinon les gens ne seront pas trop heureux de courir souvent. Donc revenir sur ce territoire. Obtenez votre régulièrement des tests à exécuter, rapide, et l'utilisation d'un serveur d'intégration continue pour exécuter le plus complet de compilation.
Un test d'intégration est un test qui consiste dépendances externes (par exemple, Base de données, Webservices, File d'attente, et certains diront système de fichiers). Un test unitaire juste des tests de l'élément spécifique de code que vous souhaitez vérifier. Il doit courir vite (9000 en 45 secondes est possible), c'est à dire plus de, il devrait fonctionner dans la mémoire.
2. Convertir Des Tests D'Intégration Pour Les Tests Unitaires
Si la majeure partie de vos tests unitaires est plus petite que votre intégration de la suite de tests, vous avez un problème. Ce que cela signifie, c'est que les incohérences commencent à apparaître de plus en plus facilement. A partir de là, commencer à créer plus de tests unitaires pour remplacer les tests d'intégration. Les choses que vous pouvez faire pour aider à ce processus sont:
- Utiliser un moqueur cadre au lieu de la véritable ressource. Rspec a une fonction intégrée de se moquant de cadre.
- Exécuter rcov sur vos tests unitaires. L'utiliser pour évaluer la façon dont approfondie de votre appareil suite de tests.
Une fois que vous avez une bonne unité de test(s) pour remplacer un test d'intégration - supprimer le test d'intégration. Double test rend la maintenance pire.
3. Ne pas Utiliser Luminaires
Les sanitaires sont mauvaises. Utiliser une usine à la place (machiniste ou factory_girl). Ces systèmes peuvent construire plus adaptable graphes de données, et plus important encore, ils peuvent construire des objets en mémoire que vous pouvez utiliser, plutôt que de charger les choses à partir d'une source de données externe.
4. Ajouter Des Contrôles Pour Arrêter Les Tests Unitaires Devenir Des Tests D'Intégration
Maintenant que vous avez un test plus rapide en place, le temps de mettre des contrôles pour éviter que cela ne se reproduise.
Il y a des bibliothèques qui singe patch active record de jeter une erreur en essayant d'accéder à la base de données (UnitRecord).
Vous pouvez également essayer de couplage et de l'ATS qui peut aider la force de votre équipe pour écrire des tests plus rapides, parce que:
- Quelqu'un vérifier - pour que personne ne se paresseux
- Bon TDD nécessite rapide des commentaires. Lent tests de juste faire une chose douloureuse.
5. Utiliser D'Autres Bibliothèques Pour Surmonter Le Problème
Quelqu'un a parlé de spork (accélère les temps de chargement pour la suite de test sous rails3), hydra/parallel_tests - exécuter des tests unitaires en parallèle (sur plusieurs cœurs).
Cela devrait probablement être utilisé en DERNIER. Votre vrai problème, c'est tout le chemin à l'étape 1, 2, 3. Résoudre cela et vous serez dans une meilleure position pour rôle supplémentaire de l'infrastructure.