2012-03-30 66 views
22

我很難過。我有一個rails應用程序(3.1.3),我一直在最近添加devise(2.0),以創建一個用戶模型和相應的身份驗證。我安裝了設計並運行耙測試我的所有測試都拋出了相同的錯誤。在兩個單元測試和功能測試我看起來像這樣的錯誤:設計打破了我的所有測試 - ActiveRecord :: RecordNotUnique PG ::錯誤

ERROR should get index (0.05s) 
     ActiveRecord::RecordNotUnique: PG::Error: 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 ('2012-03-30 04:13:13', '2012-03-30 04:13:13', 298486374) 
     /Users/myname/.rvm/gems/[email protected]/gems/activerecord-3.1.3/lib/active_record/connection_adapters/postgresql_adapter.rb:592:in `async_exec' 

我不明白爲什麼這會影響我的所有測試,或者可能是什麼導致它。有沒有人見過這樣的事情?我在這裏做錯了什麼?

任何意見/幫助將不勝感激!

謝謝!

+0

您的用戶模型當前是否有電子郵件列/字段? – kafuchau 2012-03-30 04:28:50

+0

請參閱https://github.com/plataformatec/devise/issues/1356和https://github.com/norman/friendly_id/issues/152 – 2012-03-30 06:02:15

+4

感謝您在這裏稱重 - 我只是自己想到了這一點。這個問題與自動填充到燈具中的測試數據有關......沒有提供電子郵件,導致問題 – 2012-03-30 06:28:16

回答

1

Devise預計會有一個獨特的電子郵件列,並且您試圖通過電子郵件= nil保存多個用戶。檢查你的測試夾具,你可能只是忘記爲你的夾具用戶設置一個電子郵件。

+0

oops。只是看到了評論。很高興你想出來了。 – 2013-02-26 02:31:09

32

爲了防止有人問到這個問題,答案由Cam Norgate在評論中提供。

問題出在文件test /夾具/ users.yml裏

one: {} 
# column: value 
# 
two: {} 
# column: value 

據attemting創建兩個空的用戶(一個和兩個),沒有電子郵件。只需在兩條未註釋的行之前發表評論即可。

1

由於各種原因可能會發生此錯誤。它有助於查看PG :: Error:ERROR的完整回溯,您將看到一些應用程序/ lib代碼應該導致此錯誤,針對您的特定用例。

對我而言,這是因爲我在我的規格套件中混合了設計登錄/註銷規範助手和我自己的定製註銷,通過水豚(點擊「註銷」)助手。然後設計調用一些方法來通過update_tracked_fields更新用戶字段!並且在那一刻必須創建一個空的用戶試圖保存。

由於這是規範助手(使用warden/rack等),它發生在我的rails應用程序的流程之外,因此解釋了爲什麼我得到一個原始錯誤而不是命中我的模型驗證。

相關問題