2012-03-30 14 views
22

私は困惑しています。私は、ユーザーモデルとそれに付随する対応する認証を作成するために私が最近開発した(2.0)をビルドしたレールアプリ(3.1.3)を持っています。インストールした後、のレイクテストすべてのテストで同じエラーが投げられました。私は、これは私のテストのすべてに影響を与える理由を理解していない、またはそれを引き起こしている可能性が何Deviseがすべてのテストを壊しました - ActiveRecord :: RecordNotUnique PG :: Error

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

+0

ここを参照してくださいhttps://github.com/plataformatec/devise/issues/1356とhttps://github.com/norman/friendly_id/issues/152 –

+4

私はちょうど私自身を考え出しました。この問題は、フィクスチャに自動的に入力されたテストデータに関連していました...問題を引き起こしていた電子メールはありませんでした。 –

答えて

1

Deviseは一意の電子メール列を期待しており、複数のユーザーをemail = nilで保存しようとしています。あなたのテストフィクスチャをチェックしてください。おそらく、あなたのフィクスチャユーザのために電子メールを設定するのを忘れただけです。

+0

oops。ちょうどコメントを見た。あなたがそれを理解してうれしいです。 –

32

誰かがこの質問に来た場合、その答えはCam Norgateによってコメントで提供されました。

問題は、電子メールなしで、ファイルテスト/備品/ users.yml

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

2つの空のユーザー(1および2)を作成するattemtingさにあります。コメントアウトされていない2行の前にコメントを入れてください。

1

このエラーはさまざまな理由で発生します。これは、PG :: Error:ERRORの完全なバックトレースを調べるのに役立ちます。このエラーの原因になっているはずのapp/libコードが特定の使用例で表示されます。

私の仕様では、capybara(「ログアウト」をクリックしてください)を介して独自のログアウトを使用してログイン/ログアウトスペックヘルパーを作成していたためでした。 Deviseはupdate_tracked_fields経由でユーザーフィールドを更新するいくつかのメソッドを呼び出しました!その時点で、保存しようとした空のユーザーが作成されているに違いありません。

これはスペルヘルパー(ワーデン/ラックなどを使用しているので)私のレールアプリの流れから起こったので、なぜ私のモデルバリデーションにぶつかる代わりに生のエラーが戻ってきたのかを説明します。