Mam następujący plik:
/spec/controllers/groups_controller_spec.rb
Jakiego polecenia w terminalu używam do uruchomienia właśnie tej specyfikacji iw jakim katalogu mam wykonać polecenie?
Mój plik klejnotów:
# Test ENVIRONMENT GEMS
group :development, :test do
gem "autotest"
gem "rspec-rails", "~> 2.4"
gem "cucumber-rails", ">=0.3.2"
gem "webrat", ">=0.7.2"
gem 'factory_girl_rails'
gem 'email_spec'
end
Plik specyfikacji:
require 'spec_helper'
describe GroupsController do
include Devise::TestHelpers
describe "GET yourgroups" do
it "should be successful and return 3 items" do
Rails.logger.info 'HAIL MARRY'
get :yourgroups, :format => :json
response.should be_success
body = JSON.parse(response.body)
body.should have(3).items # @user1 has 3 permissions to 3 groups
end
end
end
bundle exec rspec spec --help
dam ci odpowiedź:Odpowiedzi:
Nie jestem pewien, jak długo ma to dostępne, ale istnieje konfiguracja Rspec do filtrowania uruchomień - teraz możesz dodać to do
spec_helper.rb
:A następnie dodać tag ostrości do
it
,context
lubdescribe
uruchomić tylko ten blok:Dokumentacja RSpec:
https://www.rubydoc.info/github/rspec/rspec-core/RSpec/Core/Configuration#filter_run_when_matching-instance_method
źródło
rspec
poleceń do uruchomienia specyfikacji z odpowiednim parametrem, aby wskazać, któryZazwyczaj robię:
Gdzie
42
reprezentuje linię testu, który chcę uruchomić.EDYCJA 1:
Możesz także użyć tagów. Zobacz tutaj .
EDYCJA 2:
Próbować:
źródło
rspec
zawiodło, ponieważ wersja w twoim systemie jest nowsza niż ta w twoim pliku gem.Z prowizją:
(Kredyt idzie do tej odpowiedzi . Idź głosuj na niego.)
EDYCJA (dzięki @cirosantilli): Aby uruchomić jeden konkretny scenariusz w ramach specyfikacji, musisz podać dopasowanie wzorca wyrażenia regularnego pasujące do opisu.
źródło
SPEC=path/to/spec.rb:42
do uruchomienia testu dla podanego numeru linii, chociaż wydaje się, że wszystkieit_behaves_like
testy również zostaną uruchomione (błąd?).Możesz przekazać wyrażenie regularne do polecenia spec, które uruchomi tylko
it
bloki pasujące do podanej nazwy.Aktualizacja 2019: Rspec2 został zmieniony z polecenia „spec” na polecenie „rspec”.
źródło
do
poit
,context
lubdescribe
deklaracji.Istnieje wiele opcji:
źródło
Moja preferowana metoda przeprowadzania określonych testów jest nieco inna - dodałem linie
Do mojego pliku spec_helper.
Teraz, ilekroć chcę uruchomić jeden konkretny test (lub kontekst lub specyfikację), mogę po prostu dodać do niego znacznik „focus” i uruchomić mój test w normalny sposób - zostaną uruchomione tylko testy zogniskowane. Jeśli usunę wszystkie tagi fokusu,
run_all_when_everything_filtered
kopie się i uruchomi wszystkie testy jak zwykle.To nie jest tak szybkie i łatwe jak opcje wiersza poleceń - wymaga edycji pliku dla testu, który chcesz uruchomić. Ale czuję, że daje ci to większą kontrolę.
źródło
Odpowiedź @apneadiving jest dobrym sposobem na rozwiązanie tego. Jednak teraz mamy nową metodę w Rspec 3.3. Możemy po prostu uruchomić
rspec spec/unit/baseball_spec.rb[#context:#it]
zamiast używać numeru linii. Zaczerpnięte stąd:Zamiast więc robić
rspec spec/unit/baseball_spec.rb:42
to, gdzie jest (test w wierszu 42), jest to pierwszy test, możemy po prostu zrobićrspec spec/unit/baseball_spec.rb[1:1]
lub wrspec spec/unit/baseball_spec.rb[1:1:1]
zależności od tego, jak zagnieżdżony jest przypadek testowy.źródło
W szynach 5
Użyłem tego sposobu do uruchomienia pojedynczego pliku testowego (wszystkie testy w jednym pliku)
Nazwę klasy można wykorzystać do dopasowania do żądanego pliku
TopicsControllerTest
Moja klasa
class TopicsControllerTest < ActionDispatch::IntegrationTest
Wynik :
Jeśli chcesz, możesz dostosować wyrażenie regularne, aby pasowało do pojedynczej metody testowej
\TopicsControllerTest#test_Should_delete\
źródło
W przypadku modelu będzie on prowadził skrzynkę tylko na linii nr 5
Dla kontrolera: będzie działał tylko na linii nr 5
W przypadku modelu sygnału lub kontrolera usuń numer linii z góry
Aby uruchomić skrzynkę we wszystkich modelach
Aby uruchomić przypadek na wszystkich kontrolerach
Aby uruchomić wszystkie sprawy
źródło
Uruchom polecenia z katalogu głównego projektu:
źródło
zaczynając od rspec 2, możesz użyć:
źródło
Biorąc pod uwagę, że pracujesz nad projektem Rails 3 z rspec 2, z katalogu głównego rails:
powinien zdecydowanie działać. Zmęczyło mnie to pisanie, więc utworzyłem alias, aby skrócić „bundle exec rspec” do „bersp”
„bundle exec” jest tak, że ładuje dokładne środowisko klejnotów określone w pliku gem: http://gembundler.com/
Rspec2 przełączono z polecenia „spec” na polecenie „rspec”.
źródło
Używam tego klejnotu ochronnego do automatycznego uruchomienia mojego testu. Wykonuje test po utworzeniu lub aktualizacji operacji na pliku testowym.
https://github.com/guard/guard-test
lub zwykle możesz uruchomić za pomocą następującego polecenia
rspec spec / controllers / groups_controller_spec.rb
źródło
Możesz zrobić coś takiego:
źródło
Możesz użyć
numer linii powinien być numerem linii „opisz” lub „to”, aby uruchomić testy obecne w tym konkretnym bloku. zamiast tego wykona wszystkie linie obok numeru_wiersza.
możesz także utworzyć blok o niestandardowej nazwie, a następnie wykonać tylko te bloki.
źródło
Innym częstym błędem jest nadal posiadanie lub aktualizacja starszej aplikacji Rails do Rails 5+ i umieszczanie
require 'spec_helper'
na górze każdego pliku testowego. To powinno się zmienić narequire 'rails_helper'
. Jeśli widzisz inne zachowanie pomiędzy zadaniem rake (rake spec
) a uruchomieniem jednej specyfikacji (rspec path/to/spec.rb
), jest to częsty powódnajlepszym rozwiązaniem jest
1) upewnij się, że używasz
require 'rails_helper'
u góry każdego pliku specyfikacji - nie w starszym stylurequire 'spec_helper'
2) użyjrake spec SPEC=path/to/spec.rb
składnirspec path/to/spec.rb
myślę, że starszy styl powinien być przez społeczność uznany obecnie za nieaktualny w 2020 r. (ale oczywiście sprawisz, że zadziała, pomijając inne względy)źródło