Руководство по Ruby on Rails глава 9.3.3

#ruby-on-rails

#ruby-on-rails

Вопрос:

Я попытался выполнить главу 9.3.3 в руководстве по Ruby on Rails (http://railstutorial.org ).

Всякий раз, когда я запускаю тесты, он говорит что-то вроде:

 Failures:

  1) Users sign in/out success should sign a user in and out
     Failure/Error: user = Factory(:user)
     ActiveRecord::RecordInvalid:
       Validation failed: Email has already been taken
     # ./spec/requests/users_spec.rb:53:in `block (4 levels) in <top (required)>'

Finished in 5.8 seconds
4 examples, 1 failure
  

Я пробовал различные исправления, включая сброс базы данных — как с помощью rake db: reset, так и с помощью rake db: populate.

Я был бы признателен за любую помощь.

Заранее спасибо.

Комментарии:

1. Можете ли вы запустить rake db: reset, а затем открыть базу данных в программе просмотра SQL, чтобы подтвердить, что данных там определенно нет, и нет конфликта между базами данных производства / разработки / тестирования?

2. единственное, что приходит на ум, это то, что задачи rake db по умолчанию нацелены на вашу базу данных разработки, а не на тестовую базу данных. Если вы добавите точку останова (установка gem ‘ruby-debug19’ дает вам полу-приличный отладчик), вы можете проверить тестовую базу данных из отладчика и посмотреть, что там действительно есть во время выполнения теста.

3. Как мне добавить точку останова? Я установил драгоценный камень.

Ответ №1:

Похоже, что ваша тестовая база данных не обернута вокруг транзакции во время выполнения ваших тестов. Это приводит к сохранению тестовой базы данных между тестовыми запусками. Используйте database Cleaner для очистки вашей тестовой базы данных после запуска каждой спецификации.

Комментарии:

1. Это не сработало — он по-прежнему отображает те же ошибки, хотя я поместил это во все соответствующие файлы, о которых мне известно.