Je pense qu'il y a un moyen de n'exécuter que des tests avec une étiquette donnée. Quelqu'un sait?
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'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 --tag option pour plus de détails.
À partir de 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 d'effectuer
describe "Awesome feature", :awesome do
où :awesome
est traité comme s'il s'agissait de :awesome => true
.
Voir également cette réponse pour savoir comment configurer RSpec pour qu'il exécute 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 - exemple (ou -e) :
rspec spec/models/user_spec.rb -e "User is admin"
Je l'utilise le plus.
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 vous concentrer sur les tests avec 'fit' ou exclure avec 'xit', comme suit:
fit 'can do so and so' do
# This is the only test that will run
end
vous pouvez également 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 context/describe (exécuter toutes les spécifications de ce bloc)
Vous pouvez également chaî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]}}
En RSpec 2.4 (je suppose), vous pouvez ajouter un 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_methodhttp://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
.
Aussi, vous pouvez 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
Puis lancez simplement
$ rspec
et seul le test ciblé sera exécuté
puis lorsque vous supprimez focus: true
tous les tests bien être exécuté à nouveau
Plus d'informations: https://www.relishapp.com/rspec/rspec-core/v/2-6/docs/filtering/inclusion-filters
Vous pouvez exécuter en tant que rspec spec/models/user_spec.rb -e "SomeContext won't run this"
.
Dans les versions plus récentes de RSpec, il est encore plus facile de configurer le support 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-menginging
https://relishapp.com/rspec/rspec-core/v/3-7/docs/configuration/run-all-when-everything-filtred