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.
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.
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.
Tags und Links ruby-on-rails-3 ruby-on-rails-plugins spork