2009-10-01 13 views
65

Jak mogę uruchomić pojedynczy test z zestawu testów rails?Jak uruchomić pojedynczy test z zestawu testów rails?

rake test ANYTHING wydaje się nie pomagać.

+0

możliwy duplikat [działającego pojedynczego zespołu szynowego/test funkcjonalny] (http://stackoverflow.com/questions/274349/running-single-rails-unit-functional-test) –

Odpowiedz

105

UWAGA:Nie powoduje to uruchomienia testu przez rake. Więc żaden kod, który masz w Rakefile NIE zostanie wykonany.

Aby uruchomić pojedynczy test, należy użyć następującego polecenia od głównego katalogu Twojego projektu Rails za:

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

ten przebiega jeden test o nazwie „nazwa”, zdefiniowanego w MyModelTest klasy w określonym pliku. Nazwa testu jest tworzona przez pobranie nazwy testu, poprzedzając ją słowem "test", a następnie oddzielając słowa od podkreśleń. 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żna uruchomić zarówno testy poprzez:

ruby -I test test/unit/my_model_test.rb 

i tylko drugi test poprzez

ruby -I test test/unit/my_model_test.rb -n test_invalid_with_bad_attributes 
+0

Czy to działa z testami funkcjonalnymi? Rails 3? –

+3

To nie działa dla mnie (w testach funkcjonalnych lub jednostkowych). Otrzymuję '0 testów, 0 asercji, 0 błędów, 0 błędów'. Railsy 3.0.7. –

+7

Jestem osobiście fanem formularza regex: '-n"/good/"'. Wyrzucanie powłoki jest zawsze zabawne, więc staram się trzymać prostych wyrażeń, ale jest to znacznie łatwiejsze niż pisanie pełnej nazwy testowej przez cały czas. – Groxx

1

Jeśli chcesz uruchomić pojedynczy test, można po prostu uruchomić je jako zwykły skryptu Ruby

ruby actionmailer/test/mail_layout_test.rb 

Można również uruchomić cały zestaw (np. ActiveRecord lub ActionMailer) przez cd -ing Into the katalog i działający tam rake test.

+1

Nie w Railsach - przynajmniej nie z domyślnymi wygenerowanymi plikami testowymi. W pierwszej linii "wymagają" test_helper "", ale ścieżka ładowania nie zostanie ustawiona w czasie. Jeśli zmienisz każdą pierwszą linię do jawnego wymagania ("wymagaj pliku File.join (nazwa pliku.display (__ FILE__)," .. "," test_helper ")"), to twoje rozwiązanie działa. –

+0

ahem, to 'wymagają plików File.join (nazwa pliku (__ FILE__), '..', 'test_helper')' –

+0

@Gaius Podwójnie zaznaczone. Pierwszy nie działa, ale 'cd'-ing w nie. Dla jasności (nie jestem pewien, czy źle to odczytam, ale powiedziałeś "wygenerowane pliki testowe"), dotyczy to samej biblioteki Railsów, * nie * projektu Railsów. – Aupajo

3

To było głupie pytanie o północy z kopalni. Railsy uprzejmie wypisują polecenie, które wykonuje na rake test. Reszta to ćwiczenie wycinania i wklejania.

~/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" 
5

Aby uruchomić pojedynczy test w rzeczywistej Rails Suite:

bundle exec ruby -I"railties/test" actionpack/test/template/form_options_helper_test.rb 
38

uruchomić plik testową:

rake test TEST=tests/functional/accounts_test.rb 

Uruchomić pojedynczy test w pliku testowego:

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

(Z komentarza @Puhlze.)

+8

Ponadto, jeśli chcesz uruchomić pojedynczy test w podanym pliku, możesz dodać środowisko testowe var, które zostanie przekazane do testu. NA PRZYKŁAD. test rake TEST = tests/functional/accounts_test.rb TESTOPTS = "- n/paid accounts /" – Puhlze

+0

Jeśli używasz bundler, jest to dobry sposób na zrobienie tego. –

+0

jeśli to ostatnie polecenie testowe nie działa, spróbuj 'test rake TEST = tests/functional/accounts_test.rb TESTOPTS =" - n '/ paid accounts /' "' (ujmując '/ paid accounts /' z pojedynczymi cudzysłowami) – rrw

10

dla szyn 5:

rails test test/models/my_model.rb 
+4

Ale to uruchamia wszystkie przypadki testowe w pliku, pytanie wymaga uruchomienia pojedynczego testu ... – user000001

0

pierwsze, uzyskać dostęp do folderu lib chcesz przetestować (to ważne), a następnie uruchomić:

~/Projects/rails/actionview (master)$ ruby -I test test/template/number_helper_test.rb 
5

Dzięki @James, odpowiedź wydaje się być:

rails test test/models/my_model.rb:22 

Założenie 22 jest numerem linii danego testu. Według szynach pomóc:

$ rails test --help 

można uruchomić jeden test, dołączając numer linii do pliku:

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

Należy również pamiętać, że test powinien dziedziczyć ActionDispatch: : Test integracji (aby to działało) (To był mój błąd):

class NexApiTest < ActionDispatch::IntegrationTest 
. 
. 
. 
+1

To wydaje się być najlepszą odpowiedzią opartą na przewodnikach Railsowych, o najmniej do testowania konkretnej linii. – tfantina

Powiązane problemy