web-dev-qa-db-fra.com

Comment lancez-vous un seul fichier de test / spécification dans RSpec?

Je veux pouvoir exécuter les tests d'un seul fichier de spécifications, par exemple pour le fichier que je modifie. rake spec exécute toutes les spécifications. Mon projet n'est pas un projet Rails, donc rake spec:doc ne fonctionne pas.

Je ne sais pas si cela compte, mais voici la structure de mon répertoire.

 ./ Rakefile 
 ./ lib 
 ./ lib/coussin.rb 
 ./ lib/coussin 
 ./ lib/coussin/doc .rb 
 ./ lib/cushion/db.rb 
 ./ spec 
 ./ spec/spec.opts 
./spec/spec_helper.rb 
 ./ spec/db_spec.rb 
266
Jonathan Tran

Ou vous pouvez ignorer rake et utiliser la commande 'rspec':

rspec path/to/spec/file.rb

Dans votre cas, je pense que tant que votre fichier ./spec/db_spec.rb inclut les aides appropriées, cela devrait fonctionner correctement.

Si vous utilisez une version plus ancienne de rspec, c'est:

spec path/to/spec/file.rb
374
Cameron Booth

L'invocation brute:

 rake spec SPEC = spec/controllers/sessions_controller_spec.rb\
 SPEC_OPTS = "- e \" doit se connecter avec le cookie\"" 

Maintenant, essayez de savoir comment intégrer cela dans votre éditeur.

199
mislav

Cette question est ancienne, mais elle apparaît en haut de Google lorsque vous recherchez comment exécuter un seul test. Je ne sais pas s'il s'agit d'un ajout récent, mais pour exécuter un seul test sur une spécification, vous pouvez procéder comme suit:

rspec path/to/spec:<line number>

où -numéro de ligne- est un numéro de ligne contenant une partie de votre test. Par exemple, si vous aviez une spécification comme:

1: 
2: it "should be awesome" do
3:   foo = 3
4:   foo.should eq(3)
5: end
6:

Supposons que cela soit enregistré dans spec/models/foo_spec.rb. Ensuite, vous courriez:

rspec spec/models/foo_spec.rb:2

et il serait juste exécuter cette spec. En fait, ce nombre peut aller de 2 à 5.

J'espère que cela t'aides!

117
juanpaco

Vous pouvez également utiliser le texte réel du scénario de test * e * xample avec -e!

Donc pour:

it "shows the plane arrival time"

vous pouvez utiliser

rspec path/to/spec/file.rb -e 'shows the plane arrival time'
./scripts/spec path/to/spec/file.rb -e 'shows the plane arrival time'

pas besoin de ratisser ici.

58
tcurdt

de l'aide (spec -h):

-l, --line LINE_NUMBER           Execute example group or example at given line.
                                 (does not work for dynamically generated examples)

Exemple: spec spec/runner_spec.rb -l 162

18
boblin

Si vous avez installé rspec comme un plugin plutôt que comme un joyau, vous ne disposerez pas de l'exécutable spec.

Quoi qu'il en soit, il vous suffit d'exécuter le fichier à l'aide de Ruby. Le code rspec est suffisamment intelligent pour exécuter les tests pour vous.

par exemple:

Ruby myclass_spec.rb
13
Orion Edwards

http://github.com/grosser/single_test vous permet de faire des choses comme ..

rake spec:user          #run spec/model/user_spec.rb (searches for user*_spec.rb)
rake test:users_c       #run test/functional/users_controller_test.rb
rake spec:user:token    #run the first spec in user_spec.rb that matches /token/
rake test:user:token    #run all tests in user_test.rb that match /token/
rake test:last
rake spec:last
12
Zeke

Ruby 1.9.2 et Rails 3 permettent d’exécuter facilement un fichier de spécification:

 Ruby -I spec/models/user_spec.rb 

Explication:

  • La commande Ruby tend à être plus rapide que la commande rake
  • -I spec signifie "inclure le répertoire 'spec' lors de la recherche de fichiers"
  • spec/models/user_spec.rb est le fichier que nous voulons exécuter.
10

Pour exécuter tous de vos fichiers rspec: rspec

note: vous devez être à la racine de votre projet

Pour exécuter n fichier rspec: rspec 'path_to/spec.rb'

note: remplacez 'path_to/spec.rb' par votre chemin. Guillemets facultatifs.

Pour exécuter n rspec test à partir d'un fichier: rspec 'path_to/spec.rb:7'

note:: 7 est le numéro de la ligne où commence le test

9
nflauria

J'avais du mal à faire fonctionner l'un de ces exemples, peut-être parce que le message est vieux et que les commandes ont changé?

Après quelques fouilles, j'ai trouvé que ça marche:

rspec spec/models/user_spec.rb

Cela exécutera uniquement le fichier unique et fournira une sortie utile dans le terminal.

5
Greg Hemphill

specky.vim

4
fred

Vous pouvez également consulter l'autotest.

L'exécution de l'autotest dans une fenêtre de commande signifie que le fichier de spécification sera exécuté chaque fois que vous l'enregistrez. En outre, il sera exécuté chaque fois que le fichier que vous spécifiez est exécuté.

Par exemple, si vous avez un fichier de spécification de modèle appelé person_spec.rb et un fichier de modèle qu'il spécifie appelé person.rb, chaque fois que vous enregistrez l'un de ces fichiers à partir de votre éditeur, le fichier de spécification est exécuté.

3
fatgeekuk

Bien que beaucoup de bonnes réponses aient été écrites à cette question, aucune d’entre elles n’utilise l’approche Rspec tags .

J'utilise des balises pour exécuter une ou plusieurs spécifications dans différents fichiers, uniquement celles liées à ma tâche de développement actuelle.

Par exemple, j'ajoute la balise "dev" avec la valeur "current":

it "creates an user", dev: :current do
  user = create(:user)
  expect(user.persisted?).to be_truthy
end

alors je cours

bundle exec rspec . --tag dev:current

Différentes balises/valeurs peuvent être définies dans des spécifications individuelles ou des groupes.

2
Victor BV

Disons que vous exécutez un test pour la création de tâches. Vous pouvez toujours exécuter ce code spécifique à l'aide du fichier crete_spec.rb comme ci-dessous.

      rspec/spec/features/controller/spec_file_name.rb

   Example:

   Creating  rspec spec/features/todos/create_spec.rb
   Editing   rspec spec/features/todos/edit_spec.rb
   Deleting  rspec spec/features/todos/destroy_spec.rb

Si vous voulez exécuter toutes les spécifications dans un seul court.

   rspec 

Si vous voulez exécuter toutes les spécifications dans un utilisateur de contrôleur spécifique, ceci.

  rspec/spec/feaures/controller_name

  Example:   rspec/spec/features/todos

J'espère que cela vous donne plus de compréhension!

2
Prabhakar