Spork, RSpec und database_cleaner zerstören die Entwicklungsdatenbank

8

Ich habe die folgende Datei spec_helper.rb in meiner Rails 3.1-Anwendung. Ich verwende Spork, um die Umgebung schneller zum Testen zu laden. Alle meine Tests haben vor dem Hinzufügen von Spork zum Mix funktioniert. Nach dem Hinzufügen von spork wurde die Testdatenbank zwischen den Testläufen nicht richtig geklärt, was einige meiner Erwartungen überschritt.

Nach anderen Anweisungen habe ich database_cleaner zum Mix mit dem unten aufgeführten Code hinzugefügt; Jetzt wird jedoch die Entwicklungsdatenbank sowie die Testdatenbank aufgeräumt. Der ENV-Aufruf ["RAILS_ENV"] gibt während dieses Aufrufs einen Test zurück.

Gibt es eine Möglichkeit, den Aufruf von DatabaseCleaner.clean_with (: truncation) explizit auf die Testdatenbank zu beschränken?

%Vor%

Update: Hier ist meine Datenbank.yml Datei

%Vor%

Außerdem habe ich das Grundproblem umgangen, indem ich clean_with call in den before (: each) -Abschnitt verschoben habe, aber das verlangsamt die Testläufe erheblich.

    
Steve Mitcham 29.09.2011, 19:03
quelle

2 Antworten

3

Haben Sie versucht, ENV["RAILS_ENV"] ||= 'test' aus dem Spork.prefork Block zu entfernen?

Sind Sie sicher, dass Spork dafür gesorgt hat, dass Ihre DB ungereinigt wurde? Wenn Sie die transaktionalen Fixtures von RSpec verwenden, ist das einzige, was dazu führen kann, die Verwendung von Factories in before(:all) block. Sie können Daten in after(:all) block bereinigen und DatabaseCleaner loswerden.

Übrigens, wenn Sie die Trunkierungsstrategie verwenden, müssen Sie DatabaseCleaner.start nicht ausführen.

    
Nash Bridges 20.02.2012 10:04
quelle
1

Ist Ihr RAILS_ENV explizit auf "Entwicklung" eingestellt? Wenn dies der Fall ist, führt der default spec_helper die Tests für die Entwicklungs-DB aus. Wenn Sie einen Test innerhalb von vim ausführen oder rspec in der Befehlszeile ausführen, wird der Test für Ihre Entwicklungsdatenbank ausgeführt.

Wenn ich gezwungen bin, database_cleaner zu verwenden, setze ich RAILS_ENV explizit auf test in spec_helper, um meine Entwicklungsdatenbank zu schützen. Jedes Mal, wenn Sie etwas anderes als Transaktions-Fixtures verwenden, ist dies wahrscheinlich eine gute Idee.

Ich nehme zur Kenntnis, dass Sie transaktionale Fixtures und database_cleaner verwenden. Sie brauchen database_cleaner überhaupt nicht, wenn Ihr DB Transaktionen unterstützt. Wenn Sie Mongo verwenden oder Capybara-Webkit-Tests ausführen, benötigen Sie database_cleaner und möchten Transaktions-Fixtures deaktivieren.

    
Jim Stewart 23.11.2012 05:35
quelle