2009-11-27 21 views
4

Je trouve des trous dans ma couverture parce que je me moquais de mes modèles dans les exemples de contrôleurs. Lorsque je supprime la méthode d'un modèle dont dépend un contrôleur, je n'obtiens pas d'échec. Venant de TDD dans les langages statiquement typés, je moque toujours les dépendances à l'objet sous test qui frappe la base de données pour augmenter la vitesse. J'obtiendrais toujours des échecs dans l'exemple ci-dessus, puisque mes mocks ont sous-classé l'objet original. Je suis à la recherche de bonnes pratiques dans une langue dynamique.Dois-je me moquer de mon modèle dans les tests du contrôleur de rails?

Merci.

MISE À JOUR:

Après avoir beaucoup d'opinions contradictoires sur ce point, il semble que cela se résume à la philosophie que vous achetez en.

La communauté Rspec semble adopter des dépendances fortement stubbing pour isoler l'objet testé. Les tests d'acceptation (traditionnellement connus sous le nom de tests d'intégration;) sont utilisés pour garantir que vos objets fonctionnent avec leurs dépendances d'exécution.

La communauté shoulda/Test :: Unit semble rester à l'écart du stubbing autant que possible. Cela permet à vos tests de confirmer que votre objet testé fonctionne réellement avec ses dépendances.

Cette vidéo résume ce bien: http://vimeo.com/3296561

Répondre

2

Oui, dans vos exemples de contrôleur, les maquettes de vos modèles. Dans vos exemples de modèle , testez vos modèles.

+0

Comment pouvez-vous résoudre le manque de couverture? Je sais que je peux le faire avec des tests d'intégration, mais j'ai l'impression que mon test d'unité devrait également révéler ces problèmes. – Lee

2

Si vous utilisez Mocha, ce qui suit devrait le faire.

Mocha::Configuration.prevent(:stubbing_non_existent_method) 
0

Lors de l'écriture de tests unitaires, l'objectif entier devrait être de tester cette unité uniquement. Considérez le modèle comme une unité et couvrez-le séparément. Le changement de modèle ne devrait pas avoir d'impact direct sur la couverture des tests unitaires du contrôleur.