Myślę, że jest sposób, aby uruchomić tylko testy z podaną etykietą. Czy ktoś wie?
Myślę, że jest sposób, aby uruchomić tylko testy z podaną etykietą. Czy ktoś wie?
Odpowiedzi:
Nie jest łatwo znaleźć dokumentację, ale możesz oznaczać przykłady hashem. Na przykład.
# 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
Więcej informacji na GitHub . (każdy z lepszym linkiem, proszę o poradę)
(aktualizacja)
RSpec jest teraz doskonale udokumentowany tutaj . Zobacz sekcję opcji --tag, aby uzyskać szczegółowe informacje.
Od wersji 2.6 ten rodzaj tagu można wyrazić jeszcze prościej, dołączając opcję konfiguracji treat_symbols_as_metadata_keys_with_true_values
, która umożliwia:
describe "Awesome feature", :awesome do
gdzie :awesome
jest traktowany tak, jakby był :awesome => true
.
Zobacz również tę odpowiedź, aby dowiedzieć się, jak skonfigurować RSpec do automatycznego uruchamiania „ukierunkowanych” testów. Działa to szczególnie dobrze z Guard .
:focus
, co również zapobiega przedostawaniu się niepożądanych elementów, takich jak „binding.pry ,
console.log”, itp. do bazy kodu.
rspec
programu :) Ponieważ dokument Relish tego nie robi.
Możesz uruchomić wszystkie testy, które zawierają określony ciąg z opcją --example (lub -e) :
rspec spec/models/user_spec.rb -e "User is admin"
Używam tego najczęściej.
W twoim spec_helper.rb
:
RSpec.configure do |config|
config.filter_run focus: true
config.run_all_when_everything_filtered = true
end
a następnie w specyfikacjach:
it 'can do so and so', focus: true do
# This is the only test that will run
end
Możesz także skupić się na testach za pomocą „fit” lub wykluczyć za pomocą „xit”, na przykład:
fit 'can do so and so' do
# This is the only test that will run
end
config.filter_run_when_matching
i może działać, dodając :focus
do przykładu
Możesz również wpisać wiele numerów linii razem z dwukropkiem:
$ rspec ./spec/models/company_spec.rb:81:82:83:103
Wynik:
Run options: include {:locations=>{"./spec/models/company_spec.rb"=>[81, 82, 83, 103]}}
Jak z RSpec 2.4 (chyba) można poprzedają f
lub x
do it
, specify
, describe
i 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
Upewnij się, że masz config.filter_run focus: true
i config.run_all_when_everything_filtered = true
w swoim spec_helper.rb
.
W nowszych wersjach RSpec konfiguracja obsługi jest jeszcze łatwiejsza 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
Widzieć:
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
Możesz także uruchomić specyfikacje, które mają focus: true
domyślnie
spec / spec_helper.rb
RSpec.configure do |c|
c.filter_run focus: true
c.run_all_when_everything_filtered = true
end
Następnie po prostu biegnij
$ rspec
i zostanie uruchomiony tylko test skoncentrowany
następnie po usunięciu focus: true
wszystkich testów uruchom je ponownie
Więcej informacji: https://www.relishapp.com/rspec/rspec-core/v/2-6/docs/filtering/inclusion-filters
spec/spec_helper.rb
zawsze uwzględniony? Czy tylko wtedy, gdy nie podano opcji? Dlaczego moduły testowe mają require 'spec_helber'
, a nie posiadają powyższego kodu, eliminują możliwość wykonania pojedynczego testu poprzez określenie pliku? Nie mogę znaleźć żadnej dokumentacji na ten temat.
spec_helper.rb
jest zawsze uwzględniany, jeśli masz --require spec_helper
w .rspec
katalogu głównym projektu.
Możesz biegać jako rspec spec/models/user_spec.rb -e "SomeContext won't run this"
.