Je pense qu’il y a un moyen d’exécuter uniquement des tests avec une étiquette donnée. Quelqu’un sait-il?
Il n’est pas facile de trouver la documentation, mais vous pouvez marquer 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’infos sur GitHub . (toute personne avec un meilleur lien, s’il vous plaît aviser)
(mettre à jour)
RSpec est maintenant superbement documenté ici . Voir la section des options –tag pour plus de détails.
A partir de la v2.6, ce type de tag 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 était :awesome => true
.
Consultez également cette réponse pour savoir comment configurer RSpec pour exécuter automatiquement des tests «ciblés». Cela fonctionne particulièrement bien avec Guard .
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"
Je l’utilise le plus souvent.
Dans votre spec_helper.rb:
RSpec.configure do |config| config.filter_run focus: true config.run_all_when_everything_filtered = true end
et ensuite 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 concentrer 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
alternativement, vous pouvez passer le numéro de ligne: rspec spec/my_spec.rb:75
– le numéro de ligne peut pointer vers une seule spécification ou un bloc contextuel / descriptif (exécutant toutes les spécifications de ce bloc)
Vous pouvez également enchaîner plusieurs numéros de ligne avec deux points:
$ rspec ./spec/models/company_spec.rb:81:82:83:103
Sortie:
Run options: include {:locations=>{"./spec/models/company_spec.rb"=>[81, 82, 83, 103]}}
A partir de RSpec 2.4 (je suppose), vous pouvez y append un préfixe f
x
, specify
, describe
et mettre en 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 spec_helper.rb
.
Vous pouvez également exécuter des spécifications qui ont le 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 quand vous supprimez focus: true
tous les tests sont bien à nouveau exécutés
Plus d’informations: https://www.relishapp.com/rspec/rspec-core/v/2-6/docs/filtering/inclusion-filters
Dans les nouvelles versions de RSpec, il est encore plus facile de configurer le support:
# 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 exécuter en tant que rspec spec/models/user_spec.rb -e "SomeContext won't run this"
.