我正在尝试使用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中重置标头缓冲区?
答案 0 :(得分:0)
我通过查看Lucee来源找到了答案。 buffer is accessed via getRootOut().getHTMLHead()
。
因此清除标头缓冲区的代码可归结为:
function clearHeaderBuffer() {
getPageContext().getRootOut().resetHTMLHead();
}