我使用PHP和simpletest
进行单元测试。我的测试工作正常,直到我尝试设置cookie
try{
setcookie($name,$cookie,$cookie_expires );
}catch Exception($e){
blah
}
抛出异常是因为simpletest
已经写出了标题信息,所以我得到以下内容:
意外的PHP错误[无法修改标题信息 - 已经发送的标题(在/tests/simpletest/reporter.php:43开始输出)] [blah_code.php第280行]中的严重性[E_WARNING]
我已经看到了使用$this->expectException(new Exception());
来解决此问题的模糊解释,但没有其他文档或示例可行。有人可以提供一个工作示例或指向我的文档吗?要清楚。这不是我生成输出的代码,而是SimpleTest。
答案 0 :(得分:1)
如果您之前有输出(header函数)setcookie($name,$cookie,$cookie_expires );
,则会出现此错误。
确保在echos
之前没有任何html
或text
或<?php
或任何内容(通过空间) setcookie($name,$cookie,$cookie_expires );
。
答案 1 :(得分:1)
解决这个问题的一种方法是使用输出缓冲。
您可以在PHP的配置中全局启用它(可能在.htaccess中),或者您可以使用ob_start()及其相关功能(ob_get_clean()
,ob_end_flush()
等)。例如:
ob_start();
// your SimpleTest here.
// your header/ cookie manipulation here.
然后:
ob_end_clean(); // Stop buffering and dump everything (don't echo).
ob_end_flush(); // Stop buffering and echo out the buffer.
ob_get_clean(); // Stop buffering and return everything as a string.
或任何其他相关功能。我相信如果不这样做,PHP会在文件末尾调用ob_flush()
。