2009-10-01 3 views

Répondre

105

REMARQUE:Ceci ne lance pas le test via rake. Donc, tout code que vous avez dans Rakefile ne sera pas exécuté.

Pour exécuter un seul test, utilisez la commande suivante dans le répertoire principal de votre projet Rails:

ruby -I test test/unit/my_model_test.rb -n test_name 

Cela va un test unique nommé « nom », défini dans la classe MyModelTest dans le fichier spécifié. Le test_name est formé en prenant le nom du test, en le remplaçant par le mot "test", puis en séparant les mots avec des underscores. Par exemple:

class MyModelTest < ActiveSupport::TestCase 

    test "valid with good attributes" do 
    # do whatever you do 
    end 

    test "invalid with bad attributes" do 
    # do whatever you do 
    end 
end 

Vous pouvez exécuter les deux tests via:

ruby -I test test/unit/my_model_test.rb 

et juste le second test via

ruby -I test test/unit/my_model_test.rb -n test_invalid_with_bad_attributes 
+0

Est-ce que cela fonctionne avec des tests fonctionnels? Rails 3? –

+3

Cela ne fonctionne pas pour moi (sur les tests fonctionnels ou unitaires). Je reçois '0 tests, 0 assertions, 0 échecs, 0 erreurs'. Rails 3.0.7. –

+7

Je suis personnellement fan de la forme regex: '-n"/good/"'. L'échappement de Shell est toujours amusant, donc j'ai tendance à m'en tenir à des expressions rationnelles simples, mais c'est beaucoup plus facile que d'écrire le nom complet du test tout le temps. – Groxx

1

Si vous souhaitez exécuter un seul test, vous pouvez simplement les exécuter comme un script Ruby régulier

ruby actionmailer/test/mail_layout_test.rb 

Vous pouvez également exécuter une suite complète (par exemple. ActiveRecord ou ActionMailer) par cd -ment dans la répertoire et en cours d'exécution rake test là-bas.

+1

Not in Rails - du moins pas avec les fichiers de test par défaut générés. Ils ont "require 'test_helper'" sur la première ligne, mais le chemin de chargement n'aura pas été configuré à temps. Si vous changez chaque première ligne en un require explicite ("require File.join (File.dirname (__ FILE__), '..', 'test_helper')", alors votre solution fonctionne. –

+0

ahem, c'est 'require File.join (File.dirname (__ FILE__), '..', 'test_helper')' –

+0

@Gaius Double-cochée. Le premier ne fonctionne pas, mais le 'cd'-ing fait. Juste pour être clair (je ne suis pas sûr si j'ai mal lu ceci, mais vous avez dit "généré des fichiers de test"), c'est pour la bibliothèque Rails elle-même, * pas * un projet Rails. – Aupajo

3

C'était une question idiote de minuit de la mienne. Rails imprime la commande sur laquelle il s'exécute rake test. Le reste est un exercice de copier-coller.

~/projects/rails/actionpack (my2.3.4)$ ruby -I"lib:test" "/usr/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake/rake_test_loader.rb" "test/controller/base_test.rb" 
5

Pour exécuter un seul test dans la suite réelle Rails:

bundle exec ruby -I"railties/test" actionpack/test/template/form_options_helper_test.rb 
38

exécuter un fichier de test :

rake test TEST=tests/functional/accounts_test.rb 

Exécuter un test unique dans un fichier de test:

rake test TEST=tests/functional/accounts_test.rb TESTOPTS="-n /paid accounts/" 

(D'après le commentaire de @Puhlze.)

+8

En outre, si vous souhaitez exécuter un test unique dans le fichier donné, vous pouvez ajouter un environnement TESTOPTS var qui sera transmis au test. PAR EXEMPLE. test de rake TEST = tests/functional/accounts_test.rb TESTOPTS = "- n/comptes payés /" – Puhlze

+0

Si vous utilisez bundler, c'est un bon moyen de le faire. –

+0

si la dernière commande de test ne fonctionne pas, essayez 'rake test TEST = tests/fonctionnel/accounts_test.rb TESTOPTS =" - n '/ comptes payés /' "' (encadrant '/ paid accounts /' avec des guillemets simples) – rrw

10

Pour rails 5:

rails test test/models/my_model.rb 
+4

exécute tous les cas de test dans le fichier, la question demande d'exécuter un seul test ... – user000001

0

d'abord, accéder au dossier de la lib que vous voulez tester (ce qui est important) et puis exécutez:

~/Projects/rails/actionview (master)$ ruby -I test test/template/number_helper_test.rb 
4

Dans les rails 5,

J'ai utilisé ce moyen pour exécuter le fichier de test unique (tous les tests dans un seul fichier)

rails test -n /TopicsControllerTest/ -v 

Regardez ici https://stackoverflow.com/a/41183694/3626659

+1

c'est la meilleure réponse à la question pour les versions récentes rails, +1 – user000001

5

Merci à @ James, la réponse semble être:

rails test test/models/my_model.rb:22 

En supposant que 22 est le numéro de ligne du test donné. Selon les rails aider:

$ rails test --help 

Vous pouvez exécuter un test simple en ajoutant un numéro de ligne à un nom de fichier:

bin/rails test test/models/user_test.rb:27 

, s'il vous plaît noter également que votre test doit hériter de ActionDispatch: : IntegrationTest pour que cela fonctionne (C'était mon erreur):

class NexApiTest < ActionDispatch::IntegrationTest 
. 
. 
. 
+1

Cela semble être la meilleure réponse basée sur les guides Rails, à moins pour tester une ligne spécifique. – tfantina