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

StackOverflow https://stackoverflow.com/questions/5308307

Вопрос

Моя проблема возникла в главе 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. Анкет Это было довольно загадочно. Я думал, что заводские заявления генерируют пользователя в свежем тестировании DB каждый раз, когда AutoTest Ran RAN RSPEC. Я проверил исходные файлы из главной ветви с GIT и попробовал еще раз, но увидел ту же ошибку. Поэтому я подозревал, что это связано с содержанием БД, а не кодом.

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

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

... и все это стало зеленым. Тесты RSPEC прошли.

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

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

Это было полезно?

Решение

У меня были проблемы с интеграционными тестами вскоре после главы 9.4. Все мои тесты контроллера и тест интеграции запроса взорвались с сообщением «Электронная почта уже взята»

Чему я узнал Железнодорожник - Глава 8.4.3 - Тестовая база данных не очищается после добавления пользователя в интеграционный тест заключается в том, что вам нужно что -то сделать, чтобы очистить после интеграционных тестов, потому что в отличие от модульных тестов они могут не очистить после себя.

Представленное решение должно было использовать Databasecleaner GEM, реализация которой также объясняется в связанном вопросе.

Я думаю, что если вы не реализуете какую -то стратегию для очистки после интеграционного теста, вам будет продолжать использовать свое решение «дробовика» для очистки БД каждый раз, когда вы запускаете тестовый набор. Определенно не весело.

Другие советы

Это работает для меня:

bundle exec rake db:test:prepare

Это также в учебном пособии.

Для меня проблема, казалось, запустила Спорк. После перезапуска я могу запустить тесты столько раз, сколько мне нужно.

Это помогло, добавлено в файл factories

sequence(:email) {|n| "person#{n}@example.com" }

В моем случае проблема была в равных электронных письмах в

factory :user

а также

factory :user_with_additional_options
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top