gpt4 book ai didi

php - 如何为 Laravel 测试模拟 $_SERVER 变量?

转载 作者:行者123 更新时间:2023-12-02 03:02:55 25 4
gpt4 key购买 nike

我正在使用 shibboleth apache 模块进行联合单点登录。它使用 Active Directory 中的用户权限设置 $_SERVER 变量。在我的 Laravel 应用程序中,我使用自定义身份验证和用户提供程序,它利用这些权利进行资源授权。

我的简化用户模型是这样的:

public function isAdmin()
{
return Request::server('entitlement') === 'admin';
}

但是,我不知道如何测试它,因为 Request::server 始终不返回该值的任何内容。

public function setUp()
{
$_SERVER['entitlement'] = 'admin';
parent::setUp();
}

public function test_admin_something()
{
$user = factory(User::class)->create();

$response = $this
->actingAs($user)
->get('/admin/somewhere');

var_dump($_SERVER['entitlement']); // string(5) "admin"
var_dump(Request::server('entitlement')); // NULL

$response->assertStatus(200); // always fails 403
}

我还尝试了 setUpBeforeClass 并检查了所有其他服务器变量,这些变量在测试期间似乎被忽略,而不是自定义制作的 Request 对象。我也无法 mock 请求外观,per the documentation .

最佳答案

深入研究the source code揭示了一个未记录的方法withServerVariables

public function test_admin_something()
{
$user = factory(User::class)->create();

$response = $this
->withServerVariables(['entitlement' => 'admin'])
->actingAs($user)
->get('/admin/somewhere');

$response->assertStatus(200);
}

关于php - 如何为 Laravel 测试模拟 $_SERVER 变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44641045/

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