gpt4 book ai didi

testing - 如何在 Laravel 测试前设置 cookie?

转载 作者:行者123 更新时间:2023-11-28 20:01:05 25 4
gpt4 key购买 nike

我需要根据 cookie 的存在来测试特定行为,如何在发送请求(或访问页面)之前设置 cookie?目前以下失败,它的行为就像什么都没有设置一样。

$this->actingAs($user)
->withSession(['user' => $user, 'profile' => $profile]) ;
@setcookie( 'locale_lc', "fr", time() + 60 * 60 * 24 * 900, '/', "domain.com", true, true) ;
$this->visit('/profile') ;

或者

$cookie = ['locale_lc' => Crypt::encrypt('fr')] ;

$this->actingAs($user)
->withSession(['user' => $user, 'profile' => $profile])
->makeRequest('GET', '/profile', [], $cookie) ;

最佳答案

问题出在 cookie 的设置和读取上。 @setcookie$_COOKIE 都不能在测试上下文中工作。带有 cookie 数组的方法 makeRequest 是正确的方法。

但是!

读取脚本( Controller ,中间件)必须使用 Laravel 的 $request->cookie() 方法,而不是直接尝试使用 $_COOKIE 访问它。在我的例子中,cookie 需要被我们域中的另一个应用程序读取,因此我还必须禁用该特定 cookie 的加密,这可以在 EncryptCookies.php

中完成

加密 Cookies

<?php

protected $except = [
'locale_lc'
];

测试

<?php

$cookie = ['locale_lc' => 'fr'] ;

$this->actingAs($user)
->withSession(['user' => $user, 'profile' => $profile])
->makeRequest('GET', '/profile', [], $cookie) ;

中间件

<?php

public function handle($request, Closure $next){
if($request->cookie('locale_lc')){...}
}

关于testing - 如何在 Laravel 测试前设置 cookie?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37441736/

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