PHPUnit ::如何设置和获取cookie的功能,经过测试?

Yos*_*sef 6 php phpunit

PHPUnit ::如何设置和获取cookie的功能,在没有获得错误的情况下进行测试:标头已经发送了?

给出错误的示例:

PHPUnit_Framework_Error_Warning:无法修改标头信息 - 已经发送的标头

MyCookie.php

class MyCookie{
public static function createCookie(){
        $uid = null;
        $cookieName='test_cookie';
        if(!isset($_COOKIE[$cookieName])){
            $uid = unique_hash();
            setcookie($cookieName, $uid, 0, '', '', false, true);
        }
        else{
            $uid=$_COOKIE[$cookieName];
        }
        return $uid;
    }
}
Run Code Online (Sandbox Code Playgroud)

MyCookieTest.php

class MyCookieTest extends PHPUnit_Framework_TestCase{
    public function test_createCookie(){
            MyCookie::createCookie();
            assertThat(isset($_COOKIE['test_cookie']), is(true));
            unset($_COOKIE['test_cookie']);
            MyCookie::createCookie();
            assertThat(isset($_COOKIE['test_cookie']), is(true));
    }
}
Run Code Online (Sandbox Code Playgroud)

谢谢

Cor*_*Xii 4

如果您的 PHP 脚本执行任何输出,则会发送标头 - 并且您无法再设置 cookie。您必须发送 cookie ,然后才能输出任何 HTML(或其他输出)。

如果您没有输出任何 HTML,则可能是某个地方意外输出了空格,或者是 Unicode 字节顺序标记。如果您的编辑器支持,请将其设置为在 UTF-8 编码文件中不包含 BOM。

最后,您可以使用输出缓冲功能来延迟发送任何输出,直到您发送了所有标头并设置了 cookie。(不过,这不会修复开始缓冲之前的意外输出)