2013-10-16 10 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]がすでに別のユーザーと作成されている、またはデータベースに保存されているため、エラーが発生しています。電子メールパラメータを変更すると、同じエラーが表示されますか?あなたはそれを2回実行するとどうなりますか? – JeremyS

+0

@JeremyS助けてくれてありがとう!私はそれを変えようとしましたが、何か完全にユニークなものであっても、まったく同じエラーが発生します。 SQLを見れば、created_at、update_at、idだけが挿入されているようです。 – Lethjakman

+0

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

答えて

8

これは、レールの足場から自動的に生成された治具によって引き起こされたものです。何らかの理由で、これはそれ自身のセクションではなくテストの内部に現れます。フィクスチャを修正すると、このエラーは表示されなくなりました。

+0

こんにちは@lethjakman、私も同じ問題を与える私はfactory_girls什器ではない使用しています。何か案が? – sunil

+0

ちょっと、これはもう少し遅いことは分かっていますが、私は決して遅くはないと思っていました。工場の女の子があなたのためにフィクスチャーを生成していないことを確認し、ファクトリがデータベース側で一意の検証を失敗しないことを確認してください。これらは私が知っているこの2つの問題で、このエラーが発生する可能性があります。 – Lethjakman

0

PostgreSQL固有のキー違反のエラーメッセージが表示された場合は、プライマリキーのインデックスが同期していない可能性があります。データベースを作成した後

ActiveRecord::Base.connection.reset_pk_sequence!('users') を使用して、Userテーブルの主キーインデックスを再度同期させます。

関連する問題