Jak przeprowadzić pojedynczy test z zestawu testów rails?

Odpowiedzi:

163

UWAGA: To nie uruchamia testu za pośrednictwem rake. Więc żaden kod, który masz w nim RakefileNIE zostanie wykonany.

Aby uruchomić pojedynczy test, użyj następującego polecenia z głównego katalogu projektu rails:

ruby -I test test/unit/my_model_test.rb -n test_name

Spowoduje to uruchomienie pojedynczego testu o nazwie „name”, zdefiniowanego w klasie MyModelTest w określonym pliku. Nazwa testu jest tworzona przez pobranie nazwy testu, poprzedzenie go słowem „test”, a następnie oddzielenie słów podkreśleniami. Na przykład:

class MyModelTest < ActiveSupport::TestCase

  test "valid with good attributes" do
    # do whatever you do
  end

  test "invalid with bad attributes" do
    # do whatever you do
  end
end

Możesz uruchomić oba testy poprzez:

ruby -I test test/unit/my_model_test.rb

i dopiero drugi test przez

ruby -I test test/unit/my_model_test.rb -n test_invalid_with_bad_attributes
Darryl
źródło
4
To nie działa dla mnie (w testach funkcjonalnych lub jednostkowych). Rozumiem 0 tests, 0 assertions, 0 failures, 0 errors. Rails 3.0.7.
B Seven
10
Jestem osobiście fanem postaci regex: -n "/good/". Ucieczka z powłoki jest zawsze zabawna, więc trzymam się prostych wyrażeń regularnych, ale jest o wiele łatwiejsza niż ciągłe wypisywanie pełnej nazwy testu.
Groxx,
4
Ważne jest, aby pamiętać, że aby to zadziałało, nie powinieneś znajdować się w katalogu głównym, jak określono w odpowiedzi, ale w podkatalogu zawierającym test/folder. Na przykład, jeśli chcę uruchomić test activesupport/test/core_ext/array_ext_test.rb, powinienem być activesupport/pierwszy.
Vincent B.
3
@Groxx - Wreszcie rozwiązanie! Dziękuję Ci! -n "/good/"pracował.
B Seven
Uważaj, uruchamiając to w 2018+. Pomija niektóre zadania testowe wbudowane w szyny (takie jak db: test: przygotowanie), które są używane do wielu rzeczy, takich jak zamiana lokalnych danych na dane urządzeń i ich ponowne odtwarzanie. Uruchomienie tego zniszczyło moją lokalną bazę danych. Rozważ rozwiązanie, które wykorzystuje wbudowane zadania testowania szyn, takie jak stackoverflow.com/a/47006811/1154642 (który działał dla mnie).
bryanbraun
101

Uruchom plik testowy :

rake test TEST=tests/functional/accounts_test.rb

Uruchom pojedynczy test w pliku testowym:

rake test TEST=tests/functional/accounts_test.rb TESTOPTS="-n /paid accounts/"

(Z komentarza @Puhlze.)

laffuste
źródło
10
Ponadto, jeśli chcesz uruchomić pojedynczy test w podanym pliku, możesz dodać zmienną środowiska TESTOPTS, która zostanie przekazana do testu. Test prowizji EG TEST = testy / funkcjonalne / accounts_test.rb TESTOPTS = "- n / płatne konta /"
Puhlze
1
jeśli drugie polecenie testowe nie działa, spróbuj rake test TEST=tests/functional/accounts_test.rb TESTOPTS="-n '/paid accounts/'"( /paid accounts/w pojedynczych cudzysłowach)
rrw
40

Dla szyn 5:

rails test test/models/my_model.rb
James
źródło
10
Ale to uruchamia wszystkie przypadki testowe w pliku, pytanie prosi o uruchomienie pojedynczego testu ...
user000001
Możesz uruchomić pojedynczy test, bin/rails test test/models/user_test.rb:27
dodając
32

Dzięki @James wydaje się, że odpowiedź brzmi:

rails test test/models/my_model.rb:22

Zakładając, że 22 to numer linii danego testu. Według szyn pomagają:

 $ rails test --help

Możesz uruchomić pojedynczy test, dołączając numer wiersza do nazwy pliku:

    bin/rails test test/models/user_test.rb:27

Pamiętaj również, że Twój test powinien dziedziczyć po ActionDispatch :: IntegrationTest, aby to zadziałało (to był mój błąd):

class NexApiTest < ActionDispatch::IntegrationTest
.
.
.
Roozbeh Zabihollahi
źródło
5
Wydaje się, że jest to najlepsza odpowiedź na podstawie poradników Rails, przynajmniej do testowania określonej linii.
tfantina
12

W szynach 5,

W ten sposób uruchomiłem pojedynczy plik testowy (wszystkie testy w jednym pliku)

rails test -n /TopicsControllerTest/ -v

spójrz tutaj https://stackoverflow.com/a/41183694/3626659

Alupotha
źródło
1
to najlepsza odpowiedź na pytanie dotyczące najnowszych wersji szyn, +1
user000001
5

Aby uruchomić pojedynczy test w aktualnym zestawie Railsów:

bundle exec ruby -I"railties/test" actionpack/test/template/form_options_helper_test.rb
Brian Rose
źródło
3

To było moje głupie pytanie o północy. Railsy uprzejmie wypisują polecenie, na którym są wykonywane rake test. Reszta to ćwiczenie „wytnij i wklej”.

~/projects/rails/actionpack (my2.3.4)$ ruby -I"lib:test" "/usr/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake/rake_test_loader.rb" "test/controller/base_test.rb"
artemave
źródło
3

W mojej sytuacji raketylko działa TESTOPTS="-n='/sample/'":

bundle exec rake test TEST=test/system/example_test.rb TESTOPTS="-n='/sample/'"
N0xFF
źródło
2

Jeśli chcesz uruchomić pojedynczy test, możesz po prostu uruchomić go jako zwykły skrypt Ruby

ruby actionmailer/test/mail_layout_test.rb

Możesz także uruchomić cały pakiet (np. ActiveRecord lub ActionMailer) cdwchodząc do katalogu i uruchamiając się rake testw nim.

Aupajo
źródło
1
Nie w Railsach - przynajmniej nie z wygenerowanymi domyślnymi plikami testowymi. Mają „require 'test_helper'” w pierwszym wierszu, ale ścieżka ładowania nie zostanie skonfigurowana na czas. Jeśli zmienisz każdą pierwszą linię na wyraźne wymaganie („require File.join (File.dirname ( FILE ), '..', 'test_helper')”), to rozwiązanie działa.
James A. Rosen
ahem, to jestrequire File.join(File.dirname(__FILE__), '..', 'test_helper')
James A. Rosen
@Gaius Podwójnie zaznaczone. Pierwszy nie działa, ale cd-ing działa. Dla jasności (nie jestem pewien, czy źle to czytam, ale powiedziałeś "wygenerowane pliki testowe"), to jest dla samej biblioteki Rails, a nie projektu Rails.
Aupajo
0

Najpierw uzyskaj dostęp do folderu biblioteki, którą chcesz przetestować (jest to ważne), a następnie uruchom:

~/Projects/rails/actionview (master)$ ruby -I test test/template/number_helper_test.rb 
Diego Plentz
źródło
0

Folder Rails

  bundle install
  bundle exec ruby -I"activerecord/test" activerecord/test/cases/relation/where_test.rb 

Uwaga, musisz załadować odpowiedni folder: „activerecord / test” (gdzie masz test)

Igor Kasyanchuk
źródło