如何在Lucee中重置标头缓冲区?

时间:2019-01-14 08:10:35

标签: unit-testing cfml lucee testbox

我正在尝试使用为包含cfhtmlhead()调用的函数为在Lucee 4.5上运行的ColdBox应用程序编写单元测试。

不幸的是,通常会使用该函数将附加到HTML输出的<head>部分的字符串附加到单元测试的输出,从而导致测试失败。

cfhtmlhead()的输出显然被写入一个特殊的缓冲区。根据{{​​3}},可以清除该缓冲区。此处显示的示例函数如下所示:

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 :(得分:0)

我通过查看Lucee来源找到了答案。 buffer is accessed via getRootOut().getHTMLHead()

因此清除标头缓冲区的代码可归结为:

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