Подтвердить что ты не робот

(Rails) Assert_Select Раздражающие предупреждения

Кто-нибудь знает, как заставить 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"

Спасибо

4b9b3361

Ответ 1

Скорее всего, ваш код генерирует недопустимый HTML. Я предлагаю запустить его через валидатор и исправить все ошибки проверки.

Ответ 2

Вы можете узнать, какой тест столкнулся с проблемой, используя флаг 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): .

Ответ 4

Я хочу знать, откуда это предупреждение. Тот факт, что он не указывает тест или контроллер/действие, которое генерирует неверный HTML, является большой проблемой для меня.

Ответ 5

У меня возникли проблемы после обновления до 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

В любом случае, я не рекомендую использовать такое решение. Используйте только в том случае, если вы спешите, и дайте ему хороший комментарий, чтобы объяснить другим разработчикам, почему здесь находится фрагмент кода.

Ответ 6

Для меня причина была действительной, но плохо сформированная 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

Лучший способ отслеживать это - очень внимательно посмотреть на "текст вокруг открытого" и "текст вокруг закрытия" и попытаться отследить, где в вашем шаблоне открытое событие.

Ответ 7

Даже если вы делаете rake test TESTOPTS="-v" и появляется ошибка из ваших шаблонов просмотров, НЕ ЗА забыть проверить макет приложения html. Это случилось со мной, и это заняло несколько минут дольше, чем я хотел бы допустить, чтобы я возвращался назад и вперед между двумя файлами index.html.erb, прежде чем я, наконец, понял это. То же самое относится к любым выделенным частицам.