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 :awesome
viene 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.
rspec
programma :) 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_matching
e potrebbe funzionare solo aggiungendo :focus
all'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 f
o x
per it
, specify
, describe
e 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: true
e config.run_all_when_everything_filtered = true
nel 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.rb
sempre 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_helper
nella .rspec
radice del progetto.
Puoi correre come rspec spec/models/user_spec.rb -e "SomeContext won't run this"
.