2008-11-08 7 views
29

Als Titel.läuft Einzelschieneneinheit/Funktionstest

ruby ​​test/funktionals/whatevertest.rb funktioniert nicht, das erfordert mich alle require 'test_helper' zu require File.dirname(__FILE__) + '/../test_helper' zu ersetzen. Aus irgendeinem Grund haben die meisten dieser Testvorlagen ein solches Problem, so dass ich lieber sehe, ob es einen Hack gibt, den ich umgehen könnte.

Antwort

9

Unter Linux? warum nicht versuchen (cd test && ruby functionals/whatevertest.rb). Beachten Sie, dass die Klammern wichtig sind, da sich andernfalls Ihr aktuelles Verzeichnis in das Unterverzeichnis ändert. Was es tut, ist fork eine andere Shell, wechseln Sie in das Unterverzeichnis und starten Sie den Test.

+0

das ist ein gutes. Ich habe ein bisschen geändert in (cd test && ruby ​​functional/whatsoevertest.rb), damit es mit der relativen Verzeichnisstruktur funktioniert. Macht vollkommen Sinn :) –

+0

Mit Ihrem Update aktualisiert. – tvanfosson

13

Versuchen Sie folgendes:

Rubin -Ilib: test test/Funktionalen/whatevertest.rb

+4

Ich betreibe es tatsächlich mit: Rubin -I Test Test/funktionale/whatevertest.rb aber es endet damit, das gleiche zu sein. – Daemin

4

Die Antwort auf die Titelfrage wäre:

ruby unit/post_test.rb -n selected_test # use to run only one selected test 

aber für den Körper der Frage tvanfosson gab eine gute Antwort.

+0

Ich habe den folgenden Fehler: ': 29: in' require ': keine solche Datei zu laden - test_helper (LoadError) 'Funktioniert es mit Funktionstest? –

+0

Es sollte funktionieren. –

+0

Das ist der Fehler, den ich in Rails 3.0.7 bekomme. –

48

Die folgende Antwort basiert auf: How to run single test from rails test suite? (Stackoverflow)

Aber nur sehr kurz, hier ist die Antwort:

ruby -I test test/functional/whatevertest.rb 

Für einen spezifischenfunctional Test laufen:

ruby -I test test/functional/whatevertest.rb -n test_should_get_index 

Setzen Sie einfach Unterstriche an Stellen von Leerzeichen in Testnamen (wie oben) oder zitieren Sie den Titel wie folgt :

ruby -I test test/functional/whatevertest.rb -n 'test should get index' 

Beachten Sie, dass nur für unit Tests functional mit unit in den obigen Beispielen ersetzen. Und wenn Sie mit bundler Ihrer Anwendung gem Abhängigkeiten zu verwalten, müssen Sie die Tests mit bundle exec ausführen müssen, wie folgt:

bundle exec ruby -I test test/unit/specific_model_test.rb 
bundle exec ruby -I test test/unit/specific_model_test.rb -n test_divide_by_zero 
bundle exec ruby -I test test/unit/specific_model_test.rb -n 'test divide by zero' 

Am wichtigsten ist, beachten Sie, dass das Argument der -n Schalter Der Name des Tests und das vorangestellte Wort "test" mit Leerzeichen oder Unterstrichen, je nachdem, ob Sie den Namen angeben oder nicht. Der Grund ist, dass test eine bequeme Methode ist. Die folgenden beiden Verfahren sind äquivalente:

test "should get high" do 
    assert true 
end 

def test_should_get_high 
    assert true 
end 

... und kann als entweder der folgenden (sie sind äquivalente) ausgeführt werden:

bundle exec ruby -I test test/integration/misc_test.rb -n 'test should get high' 
bundle exec ruby -I test test/integration/misc_test.rb -n test_should_get_high 
+0

Danke das war hilfreich. Standardverzeichnis ist: test/funktional/anstelle von test/funktionals/so habe ich deine Antwort bearbeitet. Danke – vdaubry

+0

Hoppla .. danke für die Bearbeitung! Ich muss fälschlicherweise die _s_ hineingeschoben haben, weil ich manchmal nur die Funktionstests über 'bundle exec rake test: funktionals' durchführe, was Plural ist. Hinweis: Gleiches gilt für alle Unit-Tests. Ersetzen Sie einfach 'functionals' durch' units'. – user664833

+3

Das hat bei Rails 3.0.7 nicht funktioniert. Es läuft 0 Tests. –

0

meisten herkömmlichen Verfahren für 2 und 3 ist:

Rubin -I Test Test/funktional/your_test_file.rb

4

Nachdem er endlose Stunden auf diesem, fand ich endlich die Lösung (in Rails 3.0.7):

ruby -I test test/functional/users_controller_test.rb -n "/the_test_name/" 

Hinweis, dies funktioniert nur mit Unterstrich (_) in dem Befehl. Es funktioniert nicht mit Leerzeichen!

Definieren Sie den Test mit Leerzeichen wie:

test "the test name" do 

Diese Lösung verwendet Pattern-Matching, so dass Sie einen Teil des Testnamen verwenden können. Wenn der Test "sollte tun foo", dann einer der folgenden funktioniert auch.

ruby -I test test/functional/alerts_controller_test.rb -n "/foo/" 
ruby -I test test/functional/alerts_controller_test.rb -n "/do_foo/" 

Die folgende (mit Leerzeichen) wird nicht funktionieren:

ruby -I test test/functional/alerts_controller_test.rb -n "/do foo/" 
+1

Ich fand heraus, dass, wenn Sie "Raum" im Muster entkommen Es funktioniert. So etwas wie das ** funktioniert **: ruby ​​-I test test/my_test.rb -n "/ do \ foo /" –

+0

aus irgendeinem grund lassen die räume für mich gearbeitet, ich bin 'ruby -v rubin 1.9 .3p484' und '>> Rails :: version =>" 2.3.18 "' – SuckerForMayhem

5

Wenn Sie auf Rails sind 4, dann Datei/Verzeichnis Argumente Rake unterstützt. Beispiel:

rake test test/unit/user_test.rb 
rake test test/unit