You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel 5.8单元测试模拟Cookie遇阻:方法未定义且取值为null

Laravel 5.8单元测试传递Cookie的解决方案

Laravel 5.8尚未引入withCookie()方法,直接使用call()传Cookie数组或withHeaders()传Cookie头时,因框架默认的Cookie加密机制,会导致获取值为null,可通过以下两种方式解决:

方法一:传递加密后的Cookie值

直接传明文Cookie会触发解密失败返回null,需先加密Cookie值再传入:

// 加密目标Cookie值
$encryptedValue = $this->app['encrypter']->encrypt('cookie_value');

// 方式1:用call方法传递
$this->call('GET', route('offer.create'), [], ['cookie_name' => $encryptedValue]);

// 方式2:用withHeaders传递
$this->withHeaders([
    'Cookie' => "cookie_name={$encryptedValue}"
])->get(route('offer.create'));

完成后即可通过$request->cookie('cookie_name')正常获取到Cookie值。

方法二:临时关闭测试环境的Cookie加密

若不想每次手动加密,可修改测试环境的config/session.php配置,将encrypt选项设为false:

'encrypt' => false,

修改后直接传递明文Cookie即可生效:

$this->call('GET', route('offer.create'), [], ['cookie_name' => 'cookie_value']);

注意:此设置会影响所有测试用例的Cookie加密状态,测试完成后建议恢复原配置。

另外,Cookie::get('cookie_name')依赖当前请求上下文,需确保在请求发起后的代码块中调用该方法,否则也会返回null。

内容的提问来源于stack exchange,提问作者Tayyab Hanif

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 18:43:12