Devise побил все мои тесты - ActiveRecord:: RecordNotUnique PG:: Ошибка
Я в тупике. У меня есть приложение rails (3.1.3), которое я создавал там, где я недавно добавил devise (2.0), чтобы создать модель пользователя и соответствующую им аутентификацию. После того, как я установил разработку и проверил тест рейка, ВСЕ мои тесты бросили ту же ошибку. Во всех модульных и функциональных тестах я получил ошибку, которая выглядит так:
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'
Я не понимаю, почему это повлияло бы на ВСЕ мои тесты или что может быть причиной этого. Кто-нибудь видел что-то подобное раньше? Что я здесь делаю неправильно?
Любые советы/помощь будут высоко оценены!
Спасибо!
Ответы
Ответ 1
На всякий случай кто-то приходит к этому вопросу, ответ был предоставлен Cam Norgate в комментарии.
Проблема заключается в файле test/fixtures/users.yml
one: {}
# column: value
#
two: {}
# column: value
Это попытка создать двух пустых пользователей (один и два) без электронной почты. Просто поставьте комментарий перед двумя несметными строками.
Ответ 2
Devise ожидает уникальный столбец электронной почты, и вы пытаетесь сохранить более одного пользователя с адресом электронной почты = nil. Проверьте свои тестовые приборы, вы, вероятно, просто забыли указать адрес электронной почты для своих пользователей.
Ответ 3
Эта ошибка может произойти по разным причинам. Это помогает взглянуть на полную обратную сторону PG:: Error: ERROR, вы увидите код приложения /lib, который должен вызывать эту ошибку, для вашего конкретного случая использования.
В моем случае это было связано с тем, что я смешал утилиты specs login/logout spec с собственным пользовательским выходом из системы capybara (нажмите "выйти из системы" ) в моем наборе спецификаций. Затем разработайте некоторые методы для обновления пользовательских полей через update_tracked_fields! и в этот момент должен был создать пустой пользователь, пытавшийся сохранить.
Так как это помощники spec (с помощью warden/rack и т.д.), это случилось из потока моего приложения rails, поэтому объясняет, почему я получил необработанную ошибку, вместо того, чтобы нажимать на мои проверки модели.