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

Asked
Viewd2890

16

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

Спасибо

  • У меня была та же проблема, и валидатор W3C сказал мне, что мой код действителен.Проблема в моем случае была около <= и =>, которые я использовал в каком-то javascript в представлении ().Решением было заключить сценарий в тег CDATA ().Подробнее см. Этот SO-ответ: http://stackoverflow.com/questions/66837/when-is-a-cdata-section-needed-within-a-script-tag

    SooDesuNe10 июня 2012, 20:53
  • Закройте теги :)

    atw01 сентября 2015, 14:20

7 ответов

13

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

  • Например, вы можете вставить сюда необработанный HTML-код и получить список ошибок.http://validator.w3.org/#validate_by_input В моем случае внутри тега

    был тег

    , но я бы никогда не поймал его без инструмента проверки.
    Topher Hunt21 ноября 2014, 02:26
  • Эта линия сломала мою var html = '';. Обратите внимание на двойной «» рядом с «.Легко пропустить

    James Klein14 марта 2016, 20:09
4

Сканер HTML Rails ожидает XHTML, если вы используете HTML4, где теги не имеют явных закрывающих тегов, вы можете получить это предупреждение ... не похоже на решенную проблему

10

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

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

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

0

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

2

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

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

4

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

  • Ага, это очень раздражает!Мне потребовалось время, чтобы наконец избавиться от всех предупреждающих ошибок.

    CalebHC06 апреля 2010, 19:52