В настоящее время я работаю над учебником Майкла Хартла по 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 есть что-то, что вызывает проблему, но я не могу этого найти. Я хотел бы продолжить работу с учебником, но на данный момент я застрял. Любая помощь будет оценена!