1

我正在使用 PHP 并simpletest进行单元测试。在我尝试设置 cookie 之前,我的测试工作正常

try{
    setcookie($name,$cookie,$cookie_expires );
}catch Exception($e){
  blah
}

抛出异常是因为simpletest已经写出标头信息,所以我得到以下信息:

意外的 PHP 错误 [无法修改标头信息 - 标头已由(输出开始于 /tests/simpletest/reporter.php:43)] 严重性 [E_WARNING] 在 [blah_code.php 第 280 行]

我已经看到了关于捕捉这一点的模糊解释,$this->expectException(new Exception());但没有进一步的文档或有效的示例。有人可以提供一个工作示例或指向我的文档吗?要清楚。这不是我产生输出的代码,而是 SimpleTest。

4

2 回答 2

1

当您在 (标头函数)之前有输出时,您会收到此错误setcookie($name,$cookie,$cookie_expires );

确保在of之前没有任何 echoshtmltext或任何东西(甚至不是空格)。<?phpsetcookie($name,$cookie,$cookie_expires );

于 2011-03-17T10:51:40.263 回答
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.

或任何其他相关功能。ob_flush()如果您不这样做,我相信 PHP 会在文件末尾调用。

于 2011-03-17T12:23:31.120 回答