Проблемы с интеграционными тестами на Ruby on Rails Учебное пособие Майкла Хартла - PullRequest
1 голос
/ 29 марта 2011

В настоящее время я работаю над учебником Майкла Хартла по Ruby on Rails и прошел его до Главы 8. (Кстати, мне очень нравится этот учебник!) Закончив главу 8, я натолкнулся на препятствие: последний интеграционный тест в users_spec.rb успешно выполняется при первом запуске, но не удается во втором. (Вы можете увидеть раздел кода, на который я ссылаюсь, здесь -> http://ruby.railstutorial.org/chapters/sign-up#sec:successful_signup Ошибка, которая появляется в консоли, такова:

 1) Users signup success should make a new user
 Failure/Error: response.should have_selector('div.flash.success',...

Однако, просматривая весь красный HTML, который выплевывает, я обнаружил следующее:

 <div id="error_explanation">
       <h2>1 error 
           prevented this user from being saved.</h2>
       <p>There were problems with the following fields:</p>
       <ul>
   <li>Email has already been taken</li>
       </ul>
   </div>

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

Пытаясь устранить неполадки, я клонировал учебный код из GitHub и настроил приложение. Тесты работают нормально. Я могу запустить весь пакет или просто users_spec.rb столько раз, сколько захочу - без проблем. На самом деле, если честно, (и я знаю, что это кажется очень странным) код из GitHub несколько раз заканчивался ошибкой с той же ошибкой дублирования электронной почты, но затем, после того как я перестал тестировать базу данных, он работал нормально. Поверьте мне, я сделал это и в своем приложении, но у меня все еще есть та же проблема. И да, я скопировал и вставил тестовый код непосредственно из книги, а также из рабочего кода GitHub, чтобы отсеять опечатки. Без сделки.

Может показаться, что за пределами файла users_spec.rb есть что-то, что вызывает проблему, но я не могу этого найти. Я хотел бы продолжить работу с учебником, но на данный момент я застрял. Любая помощь будет оценена!

Ответы [ 2 ]

4 голосов
/ 30 марта 2011

Возможно, проверьте строку config.cache_classes в config/environments/test.rb и убедитесь, что она true. Вы также можете попытаться решить проблему, используя фабричная последовательность .

0 голосов
/ 29 марта 2011

Похоже, вам нужно убедиться, что в вашем spec_helper.rb вы очищаете свою базу данных между запусками.Ваш users_spec предполагает, что электронная почта не будет существовать, а ваши проверки пользователей гарантируют ее уникальность.

Это достойное решение: https://github.com/bmabey/database_cleaner

...