Je pense qu'il existe un moyen d'exécuter uniquement des tests avec une étiquette donnée. Quelqu'un sait-il?
Je pense qu'il existe un moyen d'exécuter uniquement des tests avec une étiquette donnée. Quelqu'un sait-il?
Réponses:
Il n'est pas facile de trouver la documentation, mais vous pouvez baliser des exemples avec un hachage. Par exemple.
# spec/my_spec.rb
describe SomeContext do
it "won't run this" do
raise "never reached"
end
it "will run this", :focus => true do
1.should == 1
end
end
$ rspec --tag focus spec/my_spec.rb
Plus d'informations sur GitHub . (toute personne ayant un meilleur lien, veuillez le conseiller)
(mettre à jour)
RSpec est maintenant superbement documenté ici . Voir la section option --tag pour plus de détails.
Depuis la v2.6, ce type de balise peut être exprimé encore plus simplement en incluant l'option de configuration treat_symbols_as_metadata_keys_with_true_values
, qui vous permet de faire:
describe "Awesome feature", :awesome do
où :awesome
est traité comme s'il l'était :awesome => true
.
Consultez également cette réponse pour savoir comment configurer RSpec pour exécuter automatiquement des tests «focalisés». Cela fonctionne particulièrement bien avec Guard .
:focus
, ce qui empêche également les indésirables comme « ,
binding.pry console.log», etc. de s'infiltrer dans la base de code.
rspec
programme :) Parce que la doc Relish ne le fait pas.
Vous pouvez exécuter tous les tests contenant une chaîne spécifique avec l' option --example (ou -e) :
rspec spec/models/user_spec.rb -e "User is admin"
J'utilise celui-là le plus.
Dans votre spec_helper.rb
:
RSpec.configure do |config|
config.filter_run focus: true
config.run_all_when_everything_filtered = true
end
puis sur vos spécifications:
it 'can do so and so', focus: true do
# This is the only test that will run
end
Vous pouvez également focaliser les tests avec 'fit' ou exclure avec 'xit', comme ceci:
fit 'can do so and so' do
# This is the only test that will run
end
config.filter_run_when_matching
et cela pourrait fonctionner simplement en ajoutant :focus
à l'exemple
Vous pouvez également enchaîner plusieurs numéros de ligne avec deux-points:
$ rspec ./spec/models/company_spec.rb:81:82:83:103
Production:
Run options: include {:locations=>{"./spec/models/company_spec.rb"=>[81, 82, 83, 103]}}
Comme vous pouvez le préfixer avec un RSpec 2.4 (je suppose) f
ou x
à it
, specify
, describe
et context
:
fit 'run only this example' do ... end
xit 'do not run this example' do ... end
http://rdoc.info/github/rspec/rspec-core/RSpec/Core/ExampleGroup#fit-class_method http://rdoc.info/github/rspec/rspec-core/RSpec/Core/ExampleGroup#xit-class_method
Assurez-vous d'avoir config.filter_run focus: true
et config.run_all_when_everything_filtered = true
dans votre fichier spec_helper.rb
.
Dans les nouvelles versions de RSpec, il est encore plus facile de configurer la prise en charge fit
:
# spec_helper.rb
# PREFERRED
RSpec.configure do |c|
c.filter_run_when_matching :focus
end
# DEPRECATED
RSpec.configure do |c|
c.filter_run focus: true
c.run_all_when_everything_filtered = true
end
Voir:
https://relishapp.com/rspec/rspec-core/docs/filtering/filter-run-when-matching
https://relishapp.com/rspec/rspec-core/v/3-7/docs/configuration/run-all-when-everything-filtered
Vous pouvez également exécuter des spécifications qui ont focus: true
par défaut
spec / spec_helper.rb
RSpec.configure do |c|
c.filter_run focus: true
c.run_all_when_everything_filtered = true
end
Alors lancez simplement
$ rspec
et seul le test ciblé sera exécuté
puis lorsque vous supprimez focus: true
tous les tests, exécutez à nouveau
Plus d'informations: https://www.relishapp.com/rspec/rspec-core/v/2-6/docs/filtering/inclusion-filters
spec/spec_helper.rb
toujours inclus? Ou seulement si aucune option n'est donnée? Pourquoi les modules de test ont require 'spec_helber'
-ils et le code ci-dessus n'élimine-t-il pas la possibilité d'exécuter un seul test en spécifiant le fichier? Je ne trouve aucune documentation à ce sujet.
spec_helper.rb
est toujours inclus si vous avez --require spec_helper
dans .rspec
la racine du projet.
Vous pouvez courir en tant que rspec spec/models/user_spec.rb -e "SomeContext won't run this"
.