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

时间:2010-10-11 14:33:39

标签: 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;
    }
}

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));
    }
}

由于

1 个答案:

答案 0 :(得分:4)

如果你的PHP脚本任何输出,标题将被发送 - 你不能再设置cookie了。您必须首先发送cookie 才能输出任何HTML(或其他输出)。

如果您没有输出任何HTML,那么它可能是偶然输出的空格或Unicode字节顺序标记。如果您的编辑器支持它,请将其设置为不包括UTF-8编码文件中的BOM。

最后,您可以使用output buffering functions延迟发送任何输出,直到您发送了所有标头并设置了Cookie。 (这会在开始缓冲之前修复意外输出