2013-02-18 2 views
11

Angesichts der folgende RSpec Konfiguration (v2.12.0):Wie zu zwingen, läuft alle RSpec Spezifikationen zu ignorieren: Fokus-Tag

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

Manchmal vergessen die Menschen den :focus Tag von Spezifikationen und in einer kontinuierlichen Integrationsumgebung zu entfernen, wo wir möchten, dass alle Spezifikationen ausgeführt werden, nur die Spezifikationen mit dem übrig gebliebenen Tag :focus werden ausgeführt.

Ich habe versucht:

rspec --tag ~focus 

... das lässt alle Angaben außer denen mit dem Stichwort: Fokus

Gibt es eine Möglichkeit Lauf ALLE specs alle Tags ignoriert zu zwingen rspec der Befehl Zeilenoptionen?

Antwort

6

Sie könnten die Linien entfernen:

config.filter_run :focus => true 
config.run_all_when_everything_filtered = true 

und Benutzer sagen zu konzentrieren Tests mit rspec --tag focus laufen. Auf diese Weise wird das CI immer die vollständige Testsuite ausführen.

Sie könnten die Umgebung im Konfigurationsblock überprüfen und die Einstellung filter_run entsprechend einbeziehen/ausschließen.

Ein weiterer Gedanke: Wenn Sie git verwenden, legen Sie einen Pre-Commit-Hook fest, um zu verhindern, dass Specs mit :focus an erster Stelle in die Codebasis kriechen.

+3

Verwendung von Umgebungsvariablen wirken wie eine sinnvolle Lösung, zum Beispiel: 'config.filter_run: Fokus => True, es sei denn, ENV ['CI'] ' – prashantrajan

+0

@prashantrajan Das würde bei mir nicht funktionieren. Unsere Codeship-Server führen die Tests vor der Bereitstellung in CI aus. Wie erwartet, führen sie Tests in ENV ['TEST'] –

9

Habe ich nur noch das zu einem Projekt:

config.before :focused => true do 
    fail "Hey dummy, don't commit focused specs." if ENV['FORBID_FOCUSED_SPECS'] 
end 

Und in dem Skript, das unser kontinuierliche Integration Server läuft:

export FORBID_FOCUSED_SPECS=true 
+0

Ich mag dies, da im Gegensatz zu Rails.env.ci?, Kann es durch unsere Codeship Testläufe, die Testumgebung verwenden verwendet werden. –

+0

Ich mag diese Idee, aber ich würde es vorziehen, Benutzer zu zwingen, in dieses Verhalten zu wählen (d. H. 'ENV ['ALLOW_FOCUSED_SPECS']'). Auf diese Weise schlägt das Standardverhalten fehl, wenn fokussierte Spezifikationen vorhanden sind. –

5

Ich wollte auf unseren kontinuierlichen Integration Server automatisch zum Scheitern verurteilt, wenn der Fokus war einstellen. Dies wurde neu geschrieben, basierend auf code von myronmarston korrekt arbeitet mit rspec-Schienen 3.2.0:

config.before(:example, :focus) do 
    fail 'This example was committed with `:focus` and should not have been' 
    end if ENV['CI'] 
5

Versuchen: rspec --tag focus --tag ~focus

+0

Auf den ersten Blick sieht das perfekt aus, aber mit 'filter_run' hat das den gleichen Effekt wie' rspec --tag ~ focus': - fokussierte Spezifikationen sind ausgeschlossen. –

Verwandte Themen