Подтвердить что ты не робот

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'

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

Любые советы/помощь будут высоко оценены!

Спасибо!

4b9b3361

Ответ 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, поэтому объясняет, почему я получил необработанную ошибку, вместо того, чтобы нажимать на мои проверки модели.