Моя проблема возникла в главе 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
. Это было довольно загадочно. Я думал, что фабричные операторы генерируют пользователя в новой тестовой базе данных каждый раз, когда автотест запускает rspec. Я извлек исходные файлы из основной ветки с помощью git и попробовал еще раз, но увидел ту же ошибку. Поэтому я подозревал, что это как-то связано с содержанием БД, а не с кодом.
Итак, я сделал следующее:
restarted "rails s"
restarted autotest
rake db:reset
rake db:migrate
rake db:test:prepare
rake db:populate
... и все стало зеленым. Тесты rspec пройдены.
Может быть, есть более «конкретное» решение, но я был взволнован, это сработало. Надеюсь, это поможет кому-то еще. Мне осталось сделать вывод, что мое тестирование / разработка каким-то образом добавило в базу данных что-то неожиданное. Я полагаю, что вышеописанные шаги - хороший способ сделать себе свежую базу данных ближе к концу главы 11.
Был ли более прямой способ решить эту проблему? Указывает ли ошибка на какую-то другую проблему, которую я решил, не осознавая этого? Мне кажется, что запуск rspec не гарантирует каждый раз новое тестирование БД. Это неправильное предположение?