Comment exécutez-vous un seul fichier test/spec dans RSpec?

Je veux pouvoir exécuter les tests d'un seul fichier de spécification-pour le fichier que je modifie, par exemple. 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 ma structure de répertoire.

./Rakefile
./lib
./lib/cushion.rb
./lib/cushion
./lib/cushion/doc.rb
./lib/cushion/db.rb
./spec
./spec/spec.opts
./spec/spec_helper.rb
./spec/db_spec.rb
248
demandé sur John Bachir 2008-09-27 20:11:52

14 réponses

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

rspec path/to/spec/file.rb

Dans votre cas, je pense aussi longtemps que votre ./spec / db_spec.fichier RB comprend les aides appropriées, il devrait fonctionner correctement.

Si vous utilisez une ancienne version de rspec il est:

spec path/to/spec/file.rb
345
répondu Cameron Booth 2012-05-05 04:13:16

L'invocation brute:

rake spec SPEC=spec/controllers/sessions_controller_spec.rb \
          SPEC_OPTS="-e \"should log in with cookie\""

Maintenant, découvrez comment intégrer ceci dans votre éditeur.

195
répondu mislav 2012-04-04 21:35:09

Cette question Est ancienne, mais elle apparaît en haut de Google lors de la recherche de comment exécuter un seul test. Je ne sais pas si c'est un ajout récent, mais pour exécuter un seul test à partir d'une spécification, vous pouvez faire ce qui suit:

rspec path/to/spec:<line number>

Où-numéro de ligne-est un numéro de ligne qui contient 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:

Disons qu'il est enregistré dans spec / models / foo_spec.RB. Ensuite, vous courriez:

rspec spec/models/foo_spec.rb:2

Et il suffit d'exécuter cette spécification. Dans fait, ce nombre pourrait être quelque chose de 2 à 5.

Espérons que cela aide!

106
répondu juanpaco 2013-03-31 13:53:06

Vous pouvez également utiliser le texte réel du cas 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 râteau ici.

57
répondu tcurdt 2014-03-17 12:25:39

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
répondu boblin 2010-08-17 10:10:24

Si vous avez installé rspec en tant que plugin plutôt qu'en tant que gem, vous n'aurez pas l'exécutable spec.

En tout cas, tout ce que vous devez faire est d'exécuter le fichier en utilisant ruby. Rspec code est assez intelligent pour exécuter les tests pour vous.

Par exemple:

ruby myclass_spec.rb
12
répondu Orion Edwards 2008-09-28 20:04:38

Http://github.com/grosser/single_test vous permet de faire des trucs 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
répondu Zeke 2009-12-15 18:29:35

Ruby 1.9.2 et Rails 3 ont un moyen facile d'exécuter un fichier de spécification:

  ruby -I spec spec/models/user_spec.rb

Explication:

  • La commande ruby a tendance à ê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
répondu joelparkerhenderson 2011-04-14 03:05:14

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

Après avoir fouiné, j'ai trouvé que cela fonctionnait:

RSpec spec / models / user_spec.rb

Qui exécutera juste le fichier unique et fournit une sortie utile dans le terminal.

5
répondu Greg Hemphill 2011-03-01 17:10:31

Specky.vim

4
répondu 2009-01-11 06:22:07

Pour exécuter tous les de votre rspec de fichiers: rspec

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

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

REMARQUE: remplacez ' path_to / spec.rb " avec votre chemin. Guillemets facultatifs.

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

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

4
répondu nflauria 2017-11-01 21:44:24

Sinon, jetez un oeil à autotest.

L'exécution d'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 speccing 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 speccing appelé person.rb, puis chaque fois que vous enregistrez l'un de ces fichiers de votre éditeur, le fichier de spécification sera exécuté.

3
répondu fatgeekuk 2008-10-03 09:12:30

Disons que vous exécutez un test pour créer todo. Vous pouvez toujours exécuter ce code spécifique todo spec en utilisant le fichier crete_spec.fichier 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 en 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
répondu Prabhakar 2014-12-08 10:43:46

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

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

Puis je cours

bundle exec rspec . --tag dev:current

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

0
répondu Victor BV 2017-05-15 15:18:41