2014-01-15 2 views
36

Ich verwende guard-rspec, um automatisch die erforderlichen rspec-Tests auszuführen, wenn sich meine Dateien ändern, und ich liebe, wie es funktioniert. Wenn ich jedoch eine Datei mit mehreren Tests debuggen möchte, möchte ich manchmal, dass ein einzelner Test erneut ausgeführt wird. Zum Beispiel mit rspec von der Kommandozeile:Wie man einen einzelnen Test in Schutz für rspec laufen lässt?

rspec spec/requests/my_favorite_spec.rb:100 

Dies wird nur die einzelne spec auf Linie 100 in my_favorite_spec.rb läuft.

Ich habe versucht, die oben in die Wache-Konsole eingeben, aber es lief nur alle Tests, als ob ich gerade Enter gedrückt hatte. Gibt es eine andere Syntax in der Wächterkonsole, um eine einzelne Spezifikation auszuführen?

Antwort

47

Sie haben zu argumentieren Ihre spec/spec_helper.rb Datei, um die :focus => true Anweisung zu akzeptieren.

RSpec.configure do |config| 
    config.filter_run :focus => true 
end 

Dann können Sie

it 'does something', :focus => true do 
    //your spec 
end 

oder

describe "something", :focus => true do 
    before do 
    sign in 
    visit page 
    end 

    it { does something } 
    it { does something else } 
end 

verwenden Wenn Sie diesen Ansatz nehmen wollen, werden Sie wahrscheinlich auch alle Spezifikationen sicherstellen wollen, ausgeführt werden, wenn es keine :focus => true mit dem documented approach:

RSpec.configure do |config| 
    config.run_all_when_everything_filtered = true 
end 

Mit Filtern können Sie viel machen; Sie können einen Blick auf diese Seite haben wollen: https://relishapp.com/rspec/rspec-core/v/3-0/docs/filtering

+0

Dies macht genau das, was ich brauchte, und die Verbindung war ebenfalls hilfreich sein. Vielen Dank! – eirikir

+0

Das funktioniert, aber wenn ich '' focus => true' aus dem 'it'-Block entferne, sagt 'guard'' 'Alle Beispiele wurden herausgefiltert'. Offensichtlich erfüllt dies den offensichtlichen Arbeitsablauf nicht. Eine vollständige Lösung würde alle Beispiele ausführen, wenn keine ': focus'-Klauseln vorhanden wären. –

+3

OK, es stellt sich heraus, dass Sie * alle Spezifikationen ausführen können, wenn keine ': focus' -Klauseln vorhanden sind, über' config.run_all_when_everything_filtered = true' im 'RSpecconfigure'-Block. Hier sind [die Dokumente] (https://relishapp.com/rspec/rspec-core/v/3-0/docs/configuration/run-all-when-everything-filtered). –

3

Ich glaube, Sie können den „Fokus: true“ add-Option für die Spezifikation Sie ausführen möchten, so etwas wie

it 'does something', focus: true do 
    //your spec 
end 

dann Sie die Datei speichern und Wache läuft nur die Test konzentriert

wenn Sie sind fertig, Sie entfernen nur "Fokus: True"

Verwandte Themen