Моя проблема возникла в главе 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 не гарантирует каждый раз новую тестовую базу данных. Это неправильное предположение?