Warum muss ich die Testdatenbank in Rails migrieren?

9

Nachdem ich eine neue Migrationsdatei erstellt, die Migration ausgeführt und meine Tests ausgeführt habe, erhalte ich:

%Vor%

Sollte das folgende Snippet in rails_helper.rb nicht die Migrationen auf die Testdatenbank für mich übernehmen?

%Vor%

Aktualisieren

Hier ist mein config/environments/test.rb wie angefordert:

%Vor%     
ardavis 07.06.2017, 22:34
quelle

3 Antworten

1

Beim Ausführen der Tests werden die Konfigurationen in der folgenden Reihenfolge geladen (es sei denn, Sie haben die Reihenfolge der automatischen Ladepfade in Ihrer Rails-App angepasst):

  1. config / application.rb
  2. config / environments / test.rb
  3. spec / rails_helper.rb

Der ausstehende Migrationsfehler muss daher auf config.active_record.migration_error = true dieser Konfigurationseinstellung zurückzuführen sein, die irgendwo auf der Rails-Engine geladen wurde rails_helper.rb , wo ActiveRecord::Migration.maintain_test_schema! directive definiert ist.

Versuchen Sie, config.active_record.migration_error = false auf Ihrer config / environments / test.rb zu setzen, um die Migrationsprüfung zu überspringen.

    
sa77 12.06.2017, 09:05
quelle
1

Es könnte zwei Gründe haben.

  1. Möglicherweise haben Sie die Konfiguration in config/environments/test.rb vergessen

Fügen Sie config.active_record.maintain_test_schema = true hinzu, wenn Sie es nicht haben oder setzen Sie es auf true , wenn Sie es auf false gesetzt haben.

Aus der Dokumentation

  

config.active_record.maintain_test_schema ist ein boolescher Wert, der   steuert, ob Active Record versuchen sollte, Ihre Testdatenbank zu behalten   Das Schema wird bei der Ausführung mit db / schema.rb (oder db / structure.sql) aktualisiert   Ihre Tests. Der Standardwert ist wahr.

  1. Sie haben möglicherweise ausstehende Migrationen, nachdem das Schema geladen wurde

Aus rspec docs

  

Was das bedeutet, ist das, anstatt nur zu erhöhen, wenn das Testschema   Bei ausstehenden Migrationen versucht Rails, das Schema zu laden. An   Ausnahme wird jetzt nur ausgelöst, wenn Migrationen ausstehen   danach wurde das Schema geladen.

Prüfen Sie, ob Sie ausstehende Migrationen mit rake db:migrate:status

haben

Auch wenn Sie SQLite 3.7.9 verwenden, sollten Sie sich dies ansehen Diskussion

    
Pavan 12.06.2017 06:13
quelle
-4

Sie sollten rails db:migrate RAILS_ENV=test ausführen, um zuerst Ihre Test-DB zu aktualisieren.

Dies bedeutet, dass Rails versucht, das Schema zu laden, anstatt es nur zu erhöhen, wenn das Testschema ausstehende Migrationen aufweist. Eine Ausnahme wird jetzt nur ausgelöst, wenn nach dem Laden des Schemas ausstehende Migrationen erfolgen.

Es gibt einige Einschränkungen, auf die Sie achten sollten, wenn Sie dies verwenden:

  • Migrationen müssen weiterhin manuell ausgeführt werden. obwohl dies jetzt nur in der 'Entwicklungsumgebung' getan werden muss.
  • Eine Ausnahme wird ausgelöst, wenn das Schema nicht initialisiert wurde. Die Ausnahme enthält Anweisungen, die angeben, dass rake db:migrate ausgeführt werden muss.
Jack_Zhou 08.06.2017 03:42
quelle