Jak uruchomić pojedynczy plik testu / specyfikacji w RSpec?


282

Chcę być w stanie przeprowadzić testy jednego pliku specyfikacji - na przykład dla jednego pliku, który edytuję. rake specwykonuje wszystkie specyfikacje. Mój projekt nie jest projektem Rails, więc rake spec:docnie działa.

Nie wiem, czy to ma znaczenie, ale oto moja struktura katalogów.

./Rakefile
./lib
./lib/cushion.rb
./lib/cushion
./lib/cushion/doc.rb
./lib/cushion/db.rb
./spec
./spec/spec.opts
./spec/spec_helper.rb
./spec/db_spec.rb

Odpowiedzi:


392

Możesz też pominąć rake i użyć polecenia „rspec”:

rspec path/to/spec/file.rb

W twoim przypadku myślę, że o ile plik ./spec/db_spec.rb zawiera odpowiednie pomocniki, powinien działać dobrze.

Jeśli używasz starszej wersji rspec, jest to:

spec path/to/spec/file.rb

31
z nowym rspec musisz użyć „rspec path / to / file.rb”
— djburdick

3
Może robię to źle, ale muszę zrobić „bundle exec rspec path / to / spec / file.rb”
— andrhamm

2
Jeśli używasz Railsów, prawdopodobnie będziesz chciał wykonać swoje specyfikacje przy użyciu Rake, aby mieć pewność, że zaczynasz od pustej bazy danych.
— superluminarny

@andrhamm, po prostu uruchamiasz swoje specyfikacje w kontekście pakietu. Jest to konieczne, jeśli nie używasz zestawów gemów (które są domyślnie dostarczane z rvm i są osobnym rozszerzeniem do rbenv)
— Caleb

6
Jeśli chcesz uruchomić tylko jeden test, do pliku dołączasz numer linii początku testu. Przykład: rspec path / to / spec / file.rb: 455
— runamok

201

Surowe wywołanie:

rake spec SPEC = spec / kontrolery / session_controller_spec.rb \
          SPEC_OPTS = "- e \" powinien zalogować się przy użyciu pliku cookie \ ""

Teraz wymyśl, jak osadzić to w swoim edytorze.


1
Jak powiedziałem, nie jestem w szynach, więc nie ma kontrolerów. Ale tak, działa funkcja „rake spec SPEC = plik.rb”. Dzięki! Pracuję teraz nad integracją Emacsa.
— Jonathan Tran

5
Nie uruchamiaj rakefile, jeśli możesz tego uniknąć. Zajmuje to cholerny wiek
— Orion Edwards

2
Zmieniłem zaakceptowaną odpowiedź, ale parametr SPEC_OPTS również był dla mnie pomocny.
— Jonathan Tran

2
To właśnie nazywam dobrą odpowiedzią. Dlaczego nie jest oznaczone jako „Odpowiedź”?
— gmile

1
Bezpośrednie uruchomienie specyfikacji jest często najlepszym wyborem, ale wiele razy musisz uruchomić prowizję na różne magiczne bity w niestandardowym pliku Rakefile
— Nerdmaster

124

To pytanie jest stare, ale pojawia się u góry Google, gdy szukasz sposobu na uruchomienie pojedynczego testu. Nie wiem, czy jest to najnowszy dodatek, ale aby uruchomić pojedynczy test ze specyfikacji, możesz wykonać następujące czynności:

rspec path/to/spec:<line number>

gdzie -line number- to numer linii, który zawiera część twojego testu. Na przykład, jeśli masz specyfikację taką jak:

1: 
2: it "should be awesome" do
3:   foo = 3
4:   foo.should eq(3)
5: end
6:

Powiedzmy, że jest zapisany w spec / models / foo_spec.rb. Wtedy biegniesz:

rspec spec/models/foo_spec.rb:2

i wystarczyłoby uruchomić tę jedną specyfikację. W rzeczywistości liczba ta może wynosić od 2 do 5.

Mam nadzieję że to pomoże!


Jest to interesujące, chociaż wygląda na to, że nie działa po ponownym przekształceniu specyfikacji w wiele plików (tzn. Można jej używać tylko z głównym plikiem _spec.rb, ale jeśli nie ma w nim żadnego z przykładów, nic nie uruchomi) . Również jeśli spróbujesz użyć go do pliku, który nie jest plikiem specyfikacji najwyższego poziomu, to również nic nie uruchomi.)
— Trejkaz

Nie do końca podążam. Co rozumiesz przez „plik specyfikacji najwyższego poziomu”? Mój zestaw testów jest prawie zawsze podzielony na kilka plików i za pomocą tej metody zawsze mogę wywoływać testy w jednym pliku. Czy masz na myśli plik, który requirejest twoimi innymi plikami specyfikacji?
— juanpaco

Mogę tego użyć na dowolnym pliku na dowolnym poziomie w katalogu spec /. Uważam, że Trejkaz jest niepoprawny.
— Michael Durrant

7
to jest niesamowite i powinno być na topie!
— Tommaso Barbugli

4
Używam tego cały czas, ale czasami chcesz uruchomić kilka testów z jednego pliku. Następnie możesz wpisać wszystkie takie przykłady:rspec spec/models/foo_spec.rb:2:12:49
— swilgosz

61

Możesz także użyć rzeczywistego tekstu przypadku testowego * e * xample za pomocą -e!

Więc dla:

it "shows the plane arrival time"

możesz użyć

rspec path/to/spec/file.rb -e 'shows the plane arrival time'
./scripts/spec path/to/spec/file.rb -e 'shows the plane arrival time'

nie trzeba tutaj grabić.


To wszystko, czego potrzebujesz, z wyjątkiem tego, że „spec” należy zastąpić „rspec”, jak stwierdzono @bandhunt
— Nicolas Wormser

19

z pomocy (spec -h):

-l, --line LINE_NUMBER           Execute example group or example at given line.
                                 (does not work for dynamically generated examples)

Przykład: spec spec / runner_spec.rb -l 162


3
W nowszych wersjach Rspec dodajesz numer wiersza po dwukropku :zgodnie z dokumentacją i popularną odpowiedzią.
— dragon788

13

Jeśli zainstalowałeś rspec jako wtyczkę, a nie klejnot, nie będziesz mieć specpliku wykonywalnego.

W każdym razie wszystko, co musisz zrobić, to uruchomić plik za pomocą ruby. Kod rspec jest wystarczająco sprytny, aby przeprowadzić dla Ciebie testy.

na przykład:

ruby myclass_spec.rb

2
Czy możliwe jest uruchomienie jednego testu w takim pliku?
— Ian Vaughan

12

http://github.com/grosser/single_test pozwala robić rzeczy takie jak ..

rake spec:user          #run spec/model/user_spec.rb (searches for user*_spec.rb)
rake test:users_c       #run test/functional/users_controller_test.rb
rake spec:user:token    #run the first spec in user_spec.rb that matches /token/
rake test:user:token    #run all tests in user_test.rb that match /token/
rake test:last
rake spec:last

Wygląda na to, że klejnot nie został zachowany, ostatnie zatwierdzenie nastąpiło 5 lat temu!
— thegreendroid

10

Ruby 1.9.2 i Rails 3 mają łatwy sposób na uruchomienie jednego pliku specyfikacji:

  ruby -I spec spec / models / user_spec.rb

Wyjaśnienie:

  • rubypolecenie wydaje się być szybsze niż rakepolecenie
  • -I spec oznacza „dołącz katalog„ spec ”podczas wyszukiwania plików”
  • spec/models/user_spec.rb to plik, który chcemy uruchomić.

Czy możesz uruchomić jeden test w tym pliku z dodatkowymi opcjami?
— Ian Vaughan

10

Aby uruchomić wszystkie pliki rspec:rspec

Uwaga: musisz być w katalogu głównym swojego projektu

Aby uruchomić jeden plik rspec:rspec 'path_to/spec.rb'

Uwaga: zamień „path_to / spec.rb” na swoją ścieżkę. Cudzysłowy są opcjonalne.

Aby uruchomić jeden test rspec z jednego pliku:rspec 'path_to/spec.rb:7'

Uwaga: 7 to numer linii, od której rozpoczyna się test


5

Miałem problem z uruchomieniem któregokolwiek z tych przykładów, może dlatego, że post jest stary, a polecenia się zmieniły?

Po kilku pogawędkach odkryłem, że działa:

rspec spec / models / user_spec.rb

To uruchomi tylko jeden plik i zapewni przydatne dane wyjściowe w terminalu.


Zostało to wspomniane w komentarzu w zaakceptowanej odpowiedzi. Tak, myślę, że ten post jest tak stary, że zmieniła się nazwa polecenia.
— Jonathan Tran

4

specky.vim


3

Alternatywnie, spójrz na autotest.

Uruchomienie autotestu w oknie poleceń oznacza, że ​​plik specyfikacji będzie wykonywany za każdym razem, gdy go zapiszesz. Będzie on także uruchamiany za każdym razem, gdy uruchamiany jest plik, który określasz.

Na przykład, jeśli masz plik specyfikacji modelu o nazwie person_spec.rb i plik modelu, który określa, o nazwie person.rb, to za każdym razem, gdy zapiszesz jeden z tych plików w edytorze, plik spec zostanie wykonany.


3

Chociaż na to pytanie napisano wiele świetnych odpowiedzi, żadna z nich nie używa Rspectags podejścia .

Używam tagów do uruchamiania jednej lub więcej specyfikacji w różnych plikach - tylko tych związanych z moim bieżącym zadaniem programistycznym.

Na przykład dodaję tag „dev” o wartości „current”:

it "creates an user", dev: :current do
  user = create(:user)
  expect(user.persisted?).to be_truthy
end

wtedy biegnę

bundle exec rspec . --tag dev:current

Różne tagi / wartości można ustawić w poszczególnych specyfikacjach lub grupach.


2

Powiedzmy, że przeprowadzasz test tworzenia todo. Zawsze możesz uruchomić ten konkretny kod specyfikacji todo, używając pliku crete_spec.rb jak poniżej.

      rspec/spec/features/controller/spec_file_name.rb

   Example:

   Creating  rspec spec/features/todos/create_spec.rb
   Editing   rspec spec/features/todos/edit_spec.rb
   Deleting  rspec spec/features/todos/destroy_spec.rb

Jeśli chcesz uruchomić wszystkie specyfikacje w jednym krótkim skrócie.

   rspec 

Jeśli chcesz uruchomić wszystkie specyfikacje dla określonego użytkownika kontrolera, to.

  rspec/spec/feaures/controller_name

  Example:   rspec/spec/features/todos

Mam nadzieję, że daje to więcej zrozumienia!

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.