2013-10-16 21 views
6

Hey Ich habe einen Test, wie dieseRails 4 Test Benutzerinitialisierung ist immer leer

test 'create account' do 
    if User.create(email: '[email protected]', password: 'blahblah') 
     assert true 
    else 
     assert User.msg 
    end 
end 

Aber wenn ich es versuche zu laufen sieht Ich erhalte eine Fehlermeldung wie folgt aus:

1) Error: 
UserTest#test_create_account: 
ActiveRecord::RecordNotUnique: PG::UniqueViolation: ERROR: duplicate key value violates unique constraint "index_users_on_email" 
DETAIL: Key (email)=() already exists. 
: INSERT INTO "users" ("created_at", "updated_at", "id") VALUES ('2013-10-16 21:59:54', '2013-10-16 21:59:54', 298486374) 

Das sieht für mich so aus, als ob ich die E-Mail nicht initialisiert hätte, aber so wie ich das verstehe, sollte das mit meinem oben erstellen initialisiert werden. Ich verwende starke Parameter, daher habe ich kein attr_accessable aktiviert und kann das durchspielen. Weiß jemand, was das verursachen könnte? Wenn Sie weitere Informationen wünschen, lassen Sie es mich wissen.

+0

Sie haben definitiv eine eindeutige Validierung für Ihr E-Mail-Attribut. Dies führt zu einem Fehler, da [email protected] bereits mit einem anderen Benutzer erstellt wurde und/oder in Ihrer Datenbank gespeichert ist. Wenn Sie den E-Mail-Parameter ändern, erhalten Sie den gleichen Fehler? Was ist, wenn Sie es zweimal ausführen? – JeremyS

+0

@ JeremyS Danke für die Hilfe! Ich habe versucht, es zu ändern und sogar mit etwas völlig Einzigartigem bekomme ich den gleichen genauen Fehler. Wenn Sie sich das SQL ansehen, sieht es nur so aus, als ob created_at, update_at und id eingefügt werden. – Lethjakman

+0

probiere 'email:" #{SecureRandom.uuid}@test.com "' – house9

Antwort

8

Dies wurde durch die automatisch erzeugten Vorrichtungen vom Gerüst der Schienen verursacht. Aus welchem ​​Grund auch immer zeigt sich dies innerhalb der Tests und nicht in einem eigenen Bereich. Als ich die Fixtures repariert habe, ist dieser Fehler nicht mehr aufgetreten.

+0

Hallo @lethjakman, ich benutze factory_girls nicht Fixtures, dann gibt es auch das gleiche Problem. Irgendeine Idee? – sunil

+0

Hey, ich weiß, das ist ein bisschen spät, aber ich dachte besser spät als nie, oder? Vergewissern Sie sich, dass das Factory-Girl keine Fixture für Sie generiert, und stellen Sie sicher, dass Ihre Factory keine eindeutige Validierung auf der Datenbankseite durchläuft. Das sind die zwei Probleme, die ich kenne, die diesen Fehler verursachen können. – Lethjakman

0

Wenn Sie eine eindeutige PostgreSQL-Schlüsselverletzung erhalten, ist Ihr Primärschlüssel möglicherweise nicht mehr synchron, z. nach dem Auffüllen der Datenbank.

Verwenden Sie ActiveRecord::Base.connection.reset_pk_sequence!('users') , um den Primärschlüsselindex für die Benutzertabelle erneut zu synchronisieren.