web-dev-qa-db-fra.com

Comment exécuter un seul test à partir d'une suite de tests Rails?

Comment puis-je exécuter un seul test à partir d'une suite de tests Rails?

rake test ANYTHING ne semble pas aider.

101
artemave

NOTE: Ceci n'exécute pas le test via rake. Ainsi, 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 exécute un seul test nommé "nom", défini dans la classe MyModelTest dans le fichier spécifié. Le nom de test est formé en prenant le nom du test, en l'ajoutant au mot "test", puis en séparant les mots avec des traits de soulignement. 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 deuxième test via 

Ruby -I test test/unit/my_model_test.rb -n test_invalid_with_bad_attributes
134
Darryl

Exécutez un fichier test :

rake test TEST=tests/functional/accounts_test.rb

Exécutez un single test dans un fichier de test:

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

(Du commentaire de @Puhlze.)

67
laffuste

Pour Rails 5:

Rails test test/models/my_model.rb
27
James

Grâce à @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 l'aide de Rails: 

 $ Rails test --help

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

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

Notez également que votre test doit hériter de ActionDispatch :: IntegrationTest pour que cela fonctionne (c'est mon erreur):

class NexApiTest < ActionDispatch::IntegrationTest
.
.
.
19

Dans Rails 5,

J'ai utilisé cette méthode pour exécuter un seul fichier de test (tous les tests dans un fichier)

Rails test -n /TopicsControllerTest/ -v

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

8
Alupotha

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

bundle exec Ruby -I"railties/test" actionpack/test/template/form_options_helper_test.rb
5
Brian Rose

C'était une question idiote de ma part à minuit. Rails affiche gentiment la commande qu'il exécute sur 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"
3
artemave

Si vous souhaitez exécuter un seul test, vous pouvez simplement les exécuter en tant que script Ruby standard.

Ruby actionmailer/test/mail_layout_test.rb

Vous pouvez également exécuter une suite complète (par exemple, ActiveRecord ou ActionMailer) en cd- dans le répertoire et en y exécutant rake test.

1
Aupajo

Le meilleur moyen consiste à consulter directement les guides: http://guides.rubyonrails.org/contributing_to_Ruby_on_Rails.html#running-tests

cd actionmailer
bundle exec Ruby -w -Itest test/mail_layout_test.rb -n test_explicit_class_layout
1
Diego Plentz

Tout d’abord, accédez au dossier de la bibliothèque que vous voulez tester (c’est important), puis lancez:

~/Projects/Rails/actionview (master)$ Ruby -I test test/template/number_helper_test.rb 
0
Diego Plentz

Dans ma situation pour rake ne fonctionne que TESTOPTS="-n='/sample/'":

bundle exec rake test TEST=test/system/example_test.rb TESTOPTS="-n='/sample/'"
0
N0xFF