Как сбросить буфер заголовка в Lucee? - PullRequest
0 голосов
/ 14 января 2019

Я пытаюсь написать модульный тест для моего приложения ColdBox, работающего на Lucee 4.5, используя для функции, которая включает вызов cfhtmlhead().

К сожалению, строка, которая обычно добавляется в раздел <head> вывода HTML с использованием этой функции, вместо этого добавляется к выводу модульного теста, что приводит к сбою теста.

Вывод cfhtmlhead() явно записывается в специальный буфер. Согласно сообщению в блоге , этот буфер можно очистить. Показанный здесь пример функции выглядит следующим образом:

function clearHeaderBuffer() {
  local.out = getPageContext().getOut();
  while (getMetaData(local.out).getName() is "coldfusion.runtime.NeoBodyContent") {
    local.out = local.out.getEnclosingWriter();
  }
  local.method = local.out.getClass().getDeclaredMethod("initHeaderBuffer", arrayNew(1));
  local.method.setAccessible(true);
  local.method.invoke(local.out, arrayNew(1));
}

Хотя сообщение в блоге написано для Adobe ColdFusion, и оно явно не работает в Lucee. По дампу local.out я увидел, что у объекта есть метод resetHTMLHead(). Но вызов этого метода тоже не работает (даже когда связанный метод getHTMLHead() выводит строку из вызова cfhtmlhead()).

Итак, как сбросить буфер заголовка в Lucee?

1 Ответ

0 голосов
/ 14 января 2019

Я нашел ответ, проверив источники Люси. Там буфер доступен через getRootOut().getHTMLHead().

Итак, код для очистки буфера заголовка сводится к следующему:

function clearHeaderBuffer() {
  getPageContext().getRootOut().resetHTMLHead();
}
...