Devise сломал все мои тесты - ActiveRecord :: RecordNotUnique PG :: Ошибка - PullRequest
22 голосов
/ 30 марта 2012

Я в тупике.У меня есть приложение rails (3.1.3), которое я собирал, где недавно добавил devise (2.0) для создания пользовательской модели и соответствующей аутентификации, которая идет с ней.После того, как я установил devise и запустил rake test , ВСЕ мои тесты выдавали одну и ту же ошибку .Как в модульных, так и в функциональных тестах я получил ошибку, которая выглядит следующим образом:

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/ruby-1.9.2-p290@global/gems/activerecord-3.1.3/lib/active_record/connection_adapters/postgresql_adapter.rb:592:in `async_exec'

Я не понимаю, почему это повлияет на ВСЕ мои тесты или что может быть причиной.Кто-нибудь видел что-то подобное раньше?Что я здесь не так делаю?

Буду признателен за любой совет / помощь!

Спасибо!

Ответы [ 3 ]

36 голосов
/ 02 ноября 2013

На всякий случай, если кто-то ответит на этот вопрос, ответ предоставил Кэм Норгейт в комментарии.

Проблема заключается в файле test / fixtures / users.yml

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

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

1 голос
/ 01 июня 2014

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

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

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

1 голос
/ 26 февраля 2013

Devise ожидает уникальный столбец электронной почты, и вы пытаетесь сохранить более одного пользователя с электронной почтой = ноль. Проверьте свои тестовые данные, вы, вероятно, просто забыли задать адрес электронной почты для своих пользователей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...