Comment exécuter un seul test RSpec?

J’ai le fichier suivant:

/spec/controllers/groups_controller_spec.rb 

Quelle commande du terminal dois-je utiliser pour exécuter uniquement cette spécification et dans quel répertoire dois-je exécuter la commande?

Mon fichier gem:

 # Test ENVIRONMENT GEMS group :development, :test do gem "autotest" gem "rspec-rails", "~> 2.4" gem "cucumber-rails", ">=0.3.2" gem "webrat", ">=0.7.2" gem 'factory_girl_rails' gem 'email_spec' end 

Fichier Spec:

 require 'spec_helper' describe GroupsController do include Devise::TestHelpers describe "GET yourgroups" do it "should be successful and return 3 items" do Rails.logger.info 'HAIL MARRY' get :yourgroups, :format => :json response.should be_success body = JSON.parse(response.body) body.should have(3).items # @user1 has 3 permissions to 3 groups end end end 

D’habitude je fais:

 rspec ./spec/controllers/groups_controller_spec.rb:42 

42 représente la ligne du test que je veux exécuter.

EDIT1:

Vous pouvez également utiliser des tags. Voir ici

EDIT 2:

Essayer:

 bundle exec rspec ./spec/controllers/groups_controller_spec.rb:42 

Avec Rake:

 rake spec SPEC=path/to/spec.rb 

(Le crédit va à cette réponse . Allez le voter.)

EDIT (grâce à @cirosantilli): Pour exécuter un scénario spécifique dans la spécification, vous devez fournir une correspondance de modèle d’expression régulière correspondant à la description.

 rake spec SPEC=path/to/spec.rb \ SPEC_OPTS="-e \"should be successful and return 3 items\"" 

Vous pouvez passer une regex à la commande spec qui exécutera uniquement les blocs correspondant au nom que vous fournissez.

 spec path/to/my_spec.rb -e "should be the correct answer" 

Ma méthode préférée pour exécuter des tests spécifiques est légèrement différente – j’ai ajouté les lignes

  RSpec.configure do |config| config.filter_run :focus => true config.run_all_when_everything_filtered = true end 

Vers mon fichier spec_helper.

Maintenant, chaque fois que je veux exécuter un test spécifique (ou un contexte ou une spécification), je peux simplement y append le tag “focus” et exécuter mon test normalement – seuls les tests ciblés seront exécutés. Si je supprime tous les tags de focus, le run_all_when_everything_filtered démarre et exécute tous les tests normalement.

Ce n’est pas aussi simple et rapide que les options de la ligne de commande: vous devez modifier le fichier pour le test que vous souhaitez exécuter. Mais je pense que cela vous donne beaucoup plus de contrôle.

Il y a beaucoup d’options:

 rspec spec # All specs rspec spec/models # All specs in the models directory rspec spec/models/a_model_spec.rb # All specs in the some_model model spec rspec spec/models/a_model_spec.rb:nn # Run the spec that includes line 'nn' rspec -e"text from a test" # Runs specs that match the text rspec spec --tag focus # Runs specs that have :focus => true rspec spec --tag focus:special # Run specs that have :focus => special rspec spec --tag focus ~skip # Run tests except those with :focus => true 

La réponse de @apneadiving est une manière judicieuse de résoudre ce problème. Cependant, nous avons maintenant une nouvelle méthode dans Rspec 3.3. Nous pouvons simplement exécuter rspec spec/unit/baseball_spec.rb[#context:#it] au lieu d’utiliser un numéro de ligne. Tiré d’ ici:

RSpec 3.3 introduit une nouvelle façon d’identifier les exemples […]

Par exemple cette commande:

$ rspec spec/unit/baseball_spec.rb[1:2,1:4] … exécuterait les 2ème et 4ème exemples ou groupes définis sous le 1er groupe de niveau supérieur défini dans spec / unit / baseball_spec.rb.

Donc, au lieu de faire rspec spec/unit/baseball_spec.rb:42 où (test à la ligne 42) est le premier test, nous pouvons simplement faire rspec spec/unit/baseball_spec.rb[1:1] ou rspec spec/unit/baseball_spec.rb[1:1:1] selon l’imbrication du cas de test.

Dans les rails 5,

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

 rails test -n /TopicsControllerTest/ -v 

Le nom de la classe peut être utilisé pour correspondre au fichier souhaité TopicsControllerTest

Ma classe de class TopicsControllerTest < ActionDispatch::IntegrationTest

Sortie:

entrer la description de l'image ici

Si vous voulez, vous pouvez modifier la regex pour correspondre à une méthode de test unique \TopicsControllerTest#test_Should_delete\

 rails test -n /TopicsControllerTest#test_Should_delete/ -v 

à partir de rspec 2, vous pouvez utiliser ce qui suit:

 # in spec/spec_helper.rb RSpec.configure do |config| config.filter_run :focus => true config.run_all_when_everything_filtered = true end # in spec/any_spec.rb describe "something" do it "does something", :focus => true do # .... end end 

Pour le modèle, il sera exécuté uniquement sur la ligne numéro 5

 bundle exec rspec spec/models/user_spec.rb:5 

Pour le contrôleur: il ne fonctionnera que sur la ligne numéro 5

 bundle exec rspec spec/controllers/users_controller_spec.rb:5 

Pour le modèle de signal ou le contrôleur, supprimez le numéro de ligne ci-dessus

Pour exécuter le cas sur tous les modèles

 bundle exec rspec spec/models 

Pour exécuter le cas sur tous les contrôleurs

 bundle exec rspec spec/controllers 

Pour exécuter tous les cas

  bundle exec rspec 

Étant donné que vous êtes sur un projet rails 3 avec rspec 2, à partir du répertoire racine des rails:

  bundle exec rspec spec/controllers/groups_controller_spec.rb 

devrait certainement fonctionner. Je me suis fatigué de taper cela, alors j’ai créé un alias pour raccourcir ‘bundle exec rspec’ à ‘bersp’

‘bundle exec’ est fait pour charger l’environnement gem exact spécifié dans votre fichier gem: http://gembundler.com/

Rspec2 est passé de la commande ‘spec’ à la commande ‘rspec’.

J’utilise cette gemme de garde pour exécuter automatiquement mon test. Il exécute le test après les opérations de création ou de mise à jour sur le fichier de test.

https://github.com/guard/guard-test

ou généralement vous pouvez exécuter en utilisant la commande suivante

rspec spec / controllers / groups_controller_spec.rb

Vous pouvez faire quelque chose comme ça:

  rspec/spec/features/controller/spec_file_name.rb rspec/spec/features/controller_name.rb #run all the specs in this controller