2012-03-30 2 views
22

Я в тупике. У меня есть приложение rails (3.1.3), которое я создавал там, где я недавно добавил devise (2.0), чтобы создать модель пользователя и соответствующую им аутентификацию. После того, как я установил программу и запустил rake test, ВСЕ мои тесты бросили ту же ошибку. Через оба блока и функциональных тестов, я получил ошибку, которая выглядит следующим образом:Devise сломал все мои тесты - 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

+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 

Он attemting создать два пустых пользователей (один и два), без электронной почты. Просто поставьте комментарий перед двумя несметными строками.

1

Эта ошибка может произойти по разным причинам. Это помогает взглянуть на полную обратную сторону PG :: Error: ERROR, вы увидите код приложения/lib, который должен вызывать эту ошибку, для вашего конкретного случая использования.

В моем случае это было связано с тем, что я смешивал специальные помощники логина/выхода из системы с моим собственным пользовательским выходом из системы через capybara (нажмите «выйти из системы») в моем наборе спецификаций. Затем разработайте некоторые методы для обновления пользовательских полей через update_tracked_fields! и в этот момент должен был создать пустой пользователь, пытавшийся сохранить.

Поскольку это помощники spec (с помощью warden/rack и т. Д.), Это произошло из-за потока моего приложения rails, поэтому объясняет, почему я получил необработанную ошибку вместо того, чтобы ударить по моей модели.

Смежные вопросы