gpt4 book ai didi

phpunit - Laravel 单元测试 - 添加 cookie 到请求?

转载 作者:行者123 更新时间:2023-12-04 00:28:51 25 4
gpt4 key购买 nike

我想用 json POST 发送一个 cookie:

public function testAccessCookie()
{
$response = $this->json('POST', route('publications'))->withCookie(Cookie::create('test'));
//some asserts
}

publications 路由有一些中间件:

public function handle($request, Closure $next)
{
Log::debug('cookie', [$request->cookies]);

//cookie validation

return $next($request);
}

但是在运行testAccessCookie()时,log里面有[null]。没有附加 cookie。

怎么了?

真实的(浏览器内)请求没有这样的问题。

最佳答案

您可以在测试调用中添加 cookie:

$cookies = ['test' => 'value'];

$response = $this->call('POST', route('publications'), [], $cookies);

https://laravel.com/api/5.4/Illuminate/Foundation/Testing/Concerns/MakesHttpRequests.html#method_call

但是,您会遇到 cookie 加密问题。您可以在测试期间暂时禁用 cookie:

use Illuminate\Cookie\Middleware\EncryptCookies;

/**
* @param array|string $cookies
* @return $this
*/
protected function disableCookiesEncryption($name)
{
$this->app->resolving(EncryptCookies::class,
function ($object) use ($name)
{
$object->disableFor($name);
});

return $this;
}

在测试开始时添加 $this->disableCookiesEncryption('test');

您可能需要添加 header 来指定 json 响应。

关于phpunit - Laravel 单元测试 - 添加 cookie 到请求?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54064280/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com