Penso che ci sia un modo per eseguire solo test con una determinata etichetta. Qualcuno lo sa?
Penso che ci sia un modo per eseguire solo test con una determinata etichetta. Qualcuno lo sa?
Risposte:
Non è facile trovare la documentazione, ma puoi taggare esempi con un hash. Per esempio.
# 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
Maggiori informazioni su GitHub . (chiunque abbia un link migliore, si prega di avvisare)
(aggiornare)
RSpec è ora superbamente documentato qui . Vedi la sezione delle opzioni --tag per i dettagli.
A partire dalla v2.6 questo tipo di tag può essere espresso in modo ancora più semplice includendo l'opzione di configurazione treat_symbols_as_metadata_keys_with_true_values, che consente di:
describe "Awesome feature", :awesome do
dove :awesomeviene trattato come se fosse :awesome => true.
Vedi anche questa risposta su come configurare RSpec per eseguire automaticamente test "focalizzati". Funziona particolarmente bene con Guard .
:focus, il che impedisce anche che indesiderabili come 'binding.pry , console.log`, ecc. si insinuino nella base di codice.
rspecprogramma :) Perché il documento Relish no.
Puoi eseguire tutti i test che contengono una stringa specifica con l' opzione --example (o -e) :
rspec spec/models/user_spec.rb -e "User is admin"
Lo uso di più.
Nel tuo spec_helper.rb:
RSpec.configure do |config|
config.filter_run focus: true
config.run_all_when_everything_filtered = true
end
e poi sulle tue specifiche:
it 'can do so and so', focus: true do
# This is the only test that will run
end
Puoi anche focalizzare i test con 'fit' o escludere con 'xit', in questo modo:
fit 'can do so and so' do
# This is the only test that will run
end
config.filter_run_when_matchinge potrebbe funzionare solo aggiungendo :focusall'esempio
Puoi anche mettere insieme più numeri di riga insieme ai due punti:
$ rspec ./spec/models/company_spec.rb:81:82:83:103
Produzione:
Run options: include {:locations=>{"./spec/models/company_spec.rb"=>[81, 82, 83, 103]}}
Come di RSpec 2.4 (credo) è possibile anteporre una fo xper it, specify, describee 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
Assicurati di avere config.filter_run focus: truee config.run_all_when_everything_filtered = truenel tuo spec_helper.rb.
Nelle versioni più recenti di RSpec, è ancora più semplice configurare il supporto 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
Vedere:
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
Inoltre è possibile eseguire le specifiche che hanno focus: true per impostazione predefinita
spec / spec_helper.rb
RSpec.configure do |c|
c.filter_run focus: true
c.run_all_when_everything_filtered = true
end
Quindi semplicemente corri
$ rspec
e verrà eseguito solo il test mirato
quindi quando lo rimuovi focus: true tutti i test, è necessario eseguire nuovamente
Ulteriori informazioni: https://www.relishapp.com/rspec/rspec-core/v/2-6/docs/filtering/inclusion-filters
spec/spec_helper.rbsempre incluso? O solo se non ci sono opzioni? Perché i moduli di test hanno require 'spec_helber'e non avere il codice sopra elimina la possibilità di eseguire un singolo test specificando il file? Non riesco a trovare alcuna documentazione su questo.
spec_helper.rbè sempre incluso se ci si trova --require spec_helpernella .rspecradice del progetto.
Puoi correre come rspec spec/models/user_spec.rb -e "SomeContext won't run this".