Учебное пособие по Rails 3 Глава 11 «Ошибка проверки: электронная почта уже принята»

Моя проблема возникла в главе 11 Учебник Ruby on Rails здесь .

Я видел эту ошибку rspec:

Failure/Error: :user => Factory(:user, :email => Factory.next(:email)))
     ActiveRecord::RecordInvalid:
       Validation failed: Email has already been taken

сначала в user_spec.rb , затем в micropost_spec.rb . Это было довольно загадочно. Я думал, что операторы factory генерируют пользователя в новой тестовой базе данных каждый раз, когда автотест запускает rspec. Я проверил исходные файлы из основной ветки с помощью git и попытался снова, но увидел ту же ошибку. Поэтому я подозревал, что это как-то связано с содержимым db, а не с кодом.

Итак, я сделал следующее:

restarted "rails s"  
restarted autotest  
rake db:reset  
rake db:migrate  
rake db:test:prepare  
rake db:populate  

... и все стало зеленым. Тесты rspec пройдены.

Возможно, существует более подходящее решение, но я был очень рад, что это сработало. Надеюсь, это поможет кому-то другому. Мне остается сделать вывод, что мое тестирование / разработка каким-то образом добавили в базу данных что-то неожиданное. Я полагаю, что описанные выше шаги - хороший способ создать себе новую базу данных ближе к концу главы 11.

Был ли более прямой способ решить эту проблему? Указывает ли ошибка на какую-то другую проблему, которую я решил, не осознавая этого? Я думаю, что запуск rspec не гарантирует каждый раз новую тестовую базу данных. Это неправильное предположение?

9
задан Marc K 17 May 2015 в 00:48
поделиться