Ответ 1
Скорее всего, ваш код генерирует недопустимый HTML. Я предлагаю запустить его через валидатор и исправить все ошибки проверки.
Кто-нибудь знает, как заставить assert_select выводить все эти неприятные html-предупреждения во время рейк-теста? Вы знаете, как этот материал:
.ignoring attempt to close body with div
opened at byte 1036, line 5
closed at byte 5342, line 42
attributes at open: {"class"=>"inner02"}
text around open: "</script>\r\t</head>\r\t<body class=\"inner02"
text around close: "\t</div>\r\t\t\t</div>\r\t\t</div>\r\t</body>\r</ht"
Спасибо
Скорее всего, ваш код генерирует недопустимый HTML. Я предлагаю запустить его через валидатор и исправить все ошибки проверки.
Вы можете узнать, какой тест столкнулся с проблемой, используя флаг TESTOPTS v: (bundle exec) rake test TESTOPTS = "- v"
Это даст:
test: Request the homepage should have a node list. (PresentControllerTest): .
test: Request the homepage should have the correct title. (PresentControllerTest): ignoring attempt to close div with body
opened at byte 4378, line 89
closed at byte 17745, line 393
attributes at open: {"class"=>"colleft"}
text around open: "class=\"colmid\"> \n\t\t\t<div class=\"colleft\""
text around close: "x2.js\" ></script>\n </body>\n</html>\n\n"
ignoring attempt to close div with html
opened at byte 4378, line 89
closed at byte 17753, line 394
attributes at open: {"class"=>"colleft"}
text around open: "class=\"colmid\"> \n\t\t\t<div class=\"colleft\""
text around close: "</script>\n </body>\n</html>\n\n"
.
test: Request the homepage should not set the flash. (PresentControllerTest): .
test: Request the homepage should respond with 200. (PresentControllerTest): .
Rails HTML-сканер ожидает XHTML, если вы используете HTML4, где теги не имеют явных закрывающих тегов, вы можете получить это предупреждение... не похоже на проблему с разрешением
Я хочу знать, откуда это предупреждение. Тот факт, что он не указывает тест или контроллер/действие, которое генерирует неверный HTML, является большой проблемой для меня.
У меня возникли проблемы после обновления до rails 3.0.9 и HAML 3.1.2 То, что я сделал, было отключить эти уродливые выходы со следующим кодом в * test_helper.rb *
# Wrap up the method assert_select because after updating to Rails 3.0.9 and HAML 3.1.2,
# I don't know why but it was raising warnings like this:
# ignoring attempt to close section with body
# opened at byte 6157, line 128
# closed at byte 16614, line 391
# attributes at open: {"class"=>"left-column"}
# text around open: "->\n\n\n</span>\n</div>\n<section class='left"
# text around close: "'1'>\n</noscript>\n</body>\n</html>\n"
# But the HTML seems to be valid (in this aspects) using a HTML validator.
ActionDispatch::Assertions::SelectorAssertions.class_eval do
alias_method :assert_select_original, :assert_select
def assert_select(*args, &block)
original_verbosity = $-v # store original output value
$-v = nil # set to nil
assert_select_original(*args, &block)
$-v = original_verbosity # and restore after execute assert_select
end
end
В любом случае, я не рекомендую использовать такое решение. Используйте только в том случае, если вы спешите, и дайте ему хороший комментарий, чтобы объяснить другим разработчикам, почему здесь находится фрагмент кода.
Для меня причина была действительной, но плохо сформированная HAML.
Это то, что у меня было:
%ul
%li
= link_to "Help", help_url
- if current_user
%li
= link_to "Users", users_url
= link_to "Logout", logout_url
- else
= link_to "Login", login_url
Это то, что правильно для того, что я хотел сделать:
%ul
%li
= link_to "Help", help_url
%li
- if current_user
= link_to "Users", users_url
= link_to "Logout", logout_url
- else
= link_to "Login", login_url
Лучший способ отслеживать это - очень внимательно посмотреть на "текст вокруг открытого" и "текст вокруг закрытия" и попытаться отследить, где в вашем шаблоне открытое событие.
Даже если вы делаете rake test TESTOPTS="-v"
и появляется ошибка из ваших шаблонов просмотров, НЕ ЗА забыть проверить макет приложения html. Это случилось со мной, и это заняло несколько минут дольше, чем я хотел бы допустить, чтобы я возвращался назад и вперед между двумя файлами index.html.erb, прежде чем я, наконец, понял это. То же самое относится к любым выделенным частицам.