2009-03-26 6 views
7

Lorsque je veux exécuter tous mes tests unitaires, je lance rake test: units. Pour exécuter tous mes tests fonctionnels, je lance rake test: fonctionnels. Si je veux courir tous les cas de test dans un seul fichier, je lanceRuby on Rails: Exécution de tests

test ruby ​​/ unité/username_test.rb

Quelques personnes me disent que je devrais courir rake à la place, comme

râteau test: units TEST = test/unit/nom_utilisateur_test.rb

Pour les tests en cours, ils disent que je devrais toujours exécuter rake. Je sais que je devrais courir râteau si je teste tous mes tests unitaires. Mais que faire si c'est juste un fichier ou une méthode de test particulière dans un fichier que je suis en train de tester? Devrais-je encore utiliser le râteau? Y a-t-il une différence entre les deux? Est-ce que j'obtiens un bénéfice de rake over ruby? Y a-t-il un inconvénient à courir le rubis plutôt que le râteau?

Répondre

2

Non, je ne pense pas. Rake semble être un moyen pratique d'exécuter tous les tests, tous les tests unitaires ou tous les tests fonctionnels/contrôleurs. Pour un fichier unique, j'utilise l'approche ruby object_test.rb .. plus courte et fonctionne très bien pour le projet maison de mes rails.

6

Malheureusement, les deux ne sont pas les mêmes. Exécuter les tests sous rake peut finir par tirer des choses de différents endroits que lorsque vous exécutez le test directement (plus un problème lorsque vous avez plusieurs versions de gemmes, etc. sur votre système). L'objectif est que les tests effectués sous râteau soient dans un environnement correspondant à ce que les rails produiraient; Je ne peux pas attester à quel point ils correspondent, mais j'ai vu que cela est passé lorsqu'il est exécuté directement mais échoué lorsqu'il est exécuté par râteau ou rails (et vice versa).

+0

Ceci indique une configuration de test médiocre et est généralement provoquée par une méthode exécutant des tests dans un ordre différent de l'autre; l'un d'eux provoque l'échec des tests. Probablement parce que vous n'utilisez pas de transactions et que les tests ne nettoient pas après eux-mêmes, ou ne nécessitent pas correctement les appareils qu'ils utilisent. –

3

Avant de vous enregistrer au moins, je vous recommande d'exécuter rake pour tout frapper, afin d'être assuré que rien d'inattendu n'est cassé.

Le rubis simple semble idéal pour tester rapidement des fichiers individuels pendant les itérations. Sachez que tout gérer à travers rake peut produire des résultats différents pour tout gérer individuellement, comme je l'ai récemment trouvé confus - je faisais quelque chose de mal dans un test qui a fonctionné avec succès en isolation mais qui a laissé un problème un test subséquent qui n'est apparu que lorsque j'ai utilisé le râteau.

-1

Ils doivent être identiques. Si ce n'est pas le cas, vous faites vraiment quelque chose de mal. Comme je l'ai dit dans mes autres commentaires, si vous obtenez des tests qui passent dans un, mais qui échouent dans l'autre, vous faites quelque chose de très mal; cela indique une configuration d'essai médiocre, et est généralement causée par un ordre d'essai différent entre les deux approches d'essai; l'un d'eux provoque l'échec des tests.

Habituellement, cela signifie que vous n'utilisez pas de transactions et/ou que les tests ne sont pas en cours de nettoyage. Par exemple, ne pas exiger correctement les appareils pour lesquels ils testent plus tard, et se fier plutôt à l'état de la base de données préexistante.

vous êtes libre d'utiliser l'une ou l'autre méthode. Si quelque chose se brise, vous faites quelque chose de mal dans vos tests, et vous devriez corriger votre code.

0

Les deux ne sont pas identiques. Rake effectuera un chargement d'essai préliminaire.L'objectif est que les tests effectués sous râteau soient dans un environnement correspondant à ce que les rails produiraient; Une différence que j'ai remarquée est avec rake une partie du chargement d'appareil qui se passe qui pourrait être passé avec ruby.

Je vous recommande d'utiliser rake, sauf si vous utilisez la ligne de commande ruby ​​pour un seul test dans le fichier avec l'option -n.