2013-10-16 79 views
6

嘿,我有一個測試,看起來像這樣軌道4測試用戶初始化始終是空白

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

但是當我嘗試運行它,我得到這樣的錯誤消息:

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) 

這看起來像我沒有初始化電子郵件,但據我瞭解這應該與我上面創建初始化。我使用強參數,所以我沒有任何attr_accessable啓用,我可以通過運行。有誰知道這可能是什麼原因造成的?如果你想要更多的信息,請告訴我。

+0

你絕對有一個獨特的驗證你的電子郵件屬性。這是由於[email protected]已經與另一個用戶創建和/或保存在您的數據庫中引發錯誤。如果你改變電子郵件參數,你會得到同樣的錯誤?如果你運行兩次呢? – JeremyS

+0

@JeremyS感謝您的幫助!我試圖改變它,甚至完全獨特的東西,我得到相同的確切的錯誤。如果你看看SQL,它看起來像只插入了created_at,update_at和id正在插入 – Lethjakman

+0

試試'email:「#{SecureRandom.uuid}@test.com」' – house9

回答

8

這是由鋼軌腳手架自動生成的固定裝置造成的。無論出於何種原因,這顯示在測試內部,而不是在它自己的部分。當我修理燈具時,此錯誤不再出現。

+0

嗨@lethjakman,我使用factory_girls不是固定裝置,那麼它也給我同樣的問題。任何想法? – sunil

+0

嘿,我知道這有點遲,但我從未想過比從未更好,對吧?仔細檢查以確保工廠女孩不會爲您生成夾具,並確保您的工廠不會在數據庫方面失敗唯一驗證。這些是我所知道的可能導致此錯誤的兩個問題。 – Lethjakman

0

如果您收到PostgreSQL唯一密鑰違規錯誤消息,可能是您的主鍵索引不同步,例如,填充數據庫後。

使用ActiveRecord::Base.connection.reset_pk_sequence!('users') 使用戶表的主鍵索引再次同步。