正在设置HTTP标头以便能够运行测试用例


Setting HTTP headers to be able to run test cases

我使用的是phpunit。我想测试我的代码,它基本上从HTTP头中获取参数,并使用它来执行后续操作。

但在测试时,标头为空。

有没有办法设置头(可能在引导文件中),这样当我的代码访问参数时,它就会得到那个值?

更新:我尝试了以下问题中建议的代码:

class Action_UserTest extends PHPUnit_Framework_TestCase {
    /**
     * @runInSeparateProcess
     */
    public function testBar()
    {
        header('Location : foo');
    }
    /**
     * @covers Action_User::executePut
     * @todo   Implement testExecutePut().
     */
    public function testExecutePut() {
        ob_start();
        $this->testBar();
        $headers_list = headers_list();
        $this->assertNotEmpty($headers_list);
        $this->assertContains('Location: foo', $headers_list);
        header_remove();
        ob_clean();
    } 
}

但给出错误:

Action_UserTest::testExecutePut()
Cannot modify header information - headers already sent by (output started at /usr/lib/php/PHPUnit/Util/Printer.php:172)

如果您使用的是testdox或类似的东西,则无法使用PHPUnit3捕获标头。我忘了是哪一个,但其中一个格式化程序在我上次查看时被窃听了

此外,您需要创建一个bootstrap.php,在其中,它真正需要的只是一个ob_start();

然后是CCD_ 2。看看这是否有效。

如果没有,如果你对这个问题给予奖励,我会更深入地研究它。