6

Fragen Sie sich nur, ob es eine Möglichkeit gibt, Rails-Tests auszuführen, ohne die Datenbank zu löschen. Ich führe gerade Unit-Tests durch und verwende dafür den folgenden Rake-Befehl: rake test:units.Führen Sie Rails-Tests ohne Dropping-Testdatenbank aus

Danke für die Hilfe im Voraus!

Für den Fall, das ist relevant:

  • Rails 3
  • Rubin 1.8.7 (MRI)
  • Oracle 11g Database
    • active-oracle_enhanced-Adapter

Antwort

2

Nach einigen Recherchen habe ich festgestellt, dass es dafür keinen Weg gibt. Die Test-Rake-Aufgaben werden immer die Datenbank löschen, selbst wenn die Option TEST= wie Bohdan schlägt.

Mit der Option --trace kann dies nachgewiesen werden. Hier ist die Ausgabe:

$ rake test:units TEST=test/unit/post_test.rb --trace 
(in /Users/johnnyicon/Development/ror/test-app) 
** Invoke test:units (first_time) 
** Invoke test:prepare (first_time) 
** Invoke db:test:prepare (first_time) 
** Invoke db:abort_if_pending_migrations (first_time) 
** Invoke environment (first_time) 
** Execute environment 
** Execute db:abort_if_pending_migrations 
** Execute db:test:prepare 
** Invoke db:test:load (first_time) 
** Invoke db:test:purge (first_time) 
** Invoke environment 
** Execute db:test:purge 
** Execute db:test:load 
** Invoke db:schema:load (first_time) 
** Invoke environment 
** Execute db:schema:load 
** Execute test:prepare 
** Execute test:units 

durch Lesen der Ruby on Rails Guides for Testing, beschreibt sie, was einige dieser Rake Aufgaben bedeuten. Besonders zu beachten ist die db:test:load Aufgabe, die Sie in der 7. Zeile von der Unterseite des Ausgangs als ** Execute db:test:load sehen. Die Führer sagen, die folgenden zu dieser Aufgabe:

die Testdatenbank neu erstellen aus dem aktuellen schema.rb

Also selbst wenn ich das Gerät testet nacheinander auszuführen waren wie Bohdan schlägt vor, die Rake-Task würde die Datenbank immer noch neu erstellen. Nicht die Antwort, auf die ich gehofft hatte, aber es ist kein Problem mehr.

Der Grund, warum ich anfing, war, weil ich keinen Zugriff auf eine andere Datenbank hatte, die ich zum Testen verwenden konnte. Daher verwendete ich meine Entwicklungsdatenbank auch zum Testen. Aber seitdem konnte ich eine andere Datenbank zum Testen bekommen.

Danke trotzdem Bohdan! Ich schätze die Hilfe!

+1

Ich bin froh, es zu hören. Ihre Testdatenbank * sollte bei jedem Test gelöscht werden, ansonsten werden Ihre Tests ungenau. –

0

Könnten Sie nicht eine benutzerdefinierte Rake-Aufgabe schreiben, die affe die Rake db: test: load Task gepatcht hat, um nichts zu tun?

0

für die Suche nach einem Weg suchen, das Standardverhalten überspringen Rails', versuchen Sie, Ihre Rakefile Hinzufügen dieses:

Rake::Task["db:test:prepare"].clear 
Rake::Task["db:test:load"].clear 
Rake::Task["db:test:purge"].clear 
+0

das funktioniert nicht! – dariush

1

in Rails 5 (und möglicherweise auch frühere Versionen), nur Kommentar-out die folgende Zeile in spec/rails_helper.rb:

ActiveRecord::Migration.maintain_test_schema! 

Dadurch wird verhindert, dass rake test oder rspec versucht, Ihre Test-DB zu löschen. Sie müssen Migrationen auch manuell ausführen.

Verwandte Themen