2014-09-02 5 views
5

Ich verwende Rails 4.1 und PostgreSQL und ich verwende die foreigner gem, um Fremdschlüssel Einschränkungen zu erstellen. Aber ich habe ein paar Probleme mit fixtures.Wie arbeiten Sie mit Tests und Fixtures in einer Datenbank mit Fremdschlüsseln in Rails?

Wenn ich laufen:

spring rake test 

Ich habe Fehler wie folgt aus:

ActiveRecord::InvalidForeignKey: PG::ForeignKeyViolation: ERROR: update or delete on table "pessoas" violates foreign key constraint "pacientes_pessoa_id_fk" on table "pacientes" 
DETAIL: Key (id)=(980190962) is still referenced from table "pacientes". 
: DELETE FROM "pessoas" 

fand ich eine Abhilfe:

RAILS_ENV=test spring rake db:reset && spring rake test 

ich die eine Art bekommen: die Datenbank neu zu erstellen von Fehlern, wenn ich versuche, die Entwicklungsdatenbank mit Fixtures unter Verwendung rake db:fixture:load zu säen.

Ich habe bereits versucht, die Fixture Loading Reihenfolge in test_helper.rb zu ändern, aber es war nicht genug.

Jemand weiß, wie man es repariert? Ich habe viel im Internet gesucht und keine Lösung gefunden.

+0

Irgendwelche Fortschritte damit? –

+0

Sie können mehrere Rake-Skripts gleichzeitig ausführen 'RAILS_ENV = Test spring rake db: reset test' – zeeraw

Antwort

2

So, ich weiß sicher, dass das funktioniert, obwohl ich nicht sagen kann, dass es eine tatsächliche korrekte Arbeit ist.

Sie müssen den Benutzer zu einem SUPERUSER machen.

In meinem Fall verwende ich Cloud 9, der Benutzer, bei dem ich angemeldet bin, ist "ubuntu".

I eingeben Sudo -u postgres psql (eigentlich sudo zweimal für C9 korrekt zuzugreifen) und Typ:

ALTER USER ubuntu SUPERUSER;

Beenden Sie und es wird funktionieren.

Wenn Sie tail log/test.rb ausführen, können Sie ein PG :: InsufficientPrivlege: ERROR sehen, wenn Sie Ihren Integrationstest ausführen, damit der Benutzer nicht über ausreichende Rechte verfügt. Du würdest das nicht in der Produktion machen wollen, aber meine Produktion ist auf Heroku, also bin ich gut.