Jak uruchomić tylko określone testy w Rspec?


159

Myślę, że jest sposób, aby uruchomić tylko testy z podaną etykietą. Czy ktoś wie?

Odpowiedzi:


186

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 :awesomejest 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 .


Więc nie musisz szukać, bezpośredni link do sugestii zetetic jest tutaj (dla Rspec 2.12) relishapp.com/rspec/rspec-core/v/2-12/docs/command-line/ ...
tir38

Dodaliśmy specyfikację do naszego zestawu, aby zapewnić, że kod nigdy nie zostanie scalony z fokusem: prawda nadal w kontroli źródła. gist.github.com/jwg2s/7361603
jwg2s

@ jwg2s Używam haka git do blokowania zatwierdzeń :focus, co również zapobiega przedostawaniu się niepożądanych elementów, takich jak „binding.pry , console.log”, itp. do bazy kodu.
zetetic

1
@Otheus nie, jestem tylko fanem :) Bardzo podoba mi się to, co zrobili w Relish, ale SO właśnie uruchomił własną funkcję dokumentacji, więc możemy zobaczyć konkurencję.
zetetic

1
Może wskażesz mi drogę do dokumentacji, która faktycznie opisuje użycie i rzeczywiste zachowanie rspecprogramu :) Ponieważ dokument Relish tego nie robi.
Otheus


90

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

1
W rspec 3.5 jest config.filter_run_when_matchingi może działać, dodając :focusdo przykładu
Ali Ghanavatian

4
Jeśli „focus: true” zostanie przypadkowo zatwierdzony, twój CI przejdzie, mimo że większość testów nie została uruchomiona.
zach

67

alternatywnie możesz podać numer linii: rspec spec/my_spec.rb:75- numer linii może wskazywać na pojedynczą specyfikację lub blok kontekstu / opisu (uruchamianie wszystkich specyfikacji w tym bloku)


50

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]}}

To jest takie złoto! 🙇🏾‍♂️
iGbanam



3

Możesz także uruchomić specyfikacje, które mają focus: truedomyś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: truewszystkich testów uruchom je ponownie

Więcej informacji: https://www.relishapp.com/rspec/rspec-core/v/2-6/docs/filtering/inclusion-filters


Czy jest spec/spec_helper.rbzawsze 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.
Otheus

1
spec_helper.rbjest zawsze uwzględniany, jeśli masz --require spec_helperw .rspeckatalogu głównym projektu.
Kris

0

Możesz biegać jako rspec spec/models/user_spec.rb -e "SomeContext won't run this".

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.