Jef*_*ett 5 php phpunit unit-testing laravel
我正在使用 shibboleth apache 模块进行联合单点登录。它$_SERVER使用来自活动目录的用户权限设置变量。在我的 Laravel 应用程序中,我使用自定义身份验证和用户提供程序,它利用这些权利进行资源授权。
我的简化用户模型是这样的:
public function isAdmin()
{
return Request::server('entitlement') === 'admin';
}
Run Code Online (Sandbox Code Playgroud)
但是,我无法弄清楚如何测试它,因为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
}
Run Code Online (Sandbox Code Playgroud)
我还尝试setUpBeforeClass并检查了所有其他服务器变量,这些变量在测试期间似乎被忽略,而不是自定义制作的 Request 对象。根据文档,我也无法模拟请求外观。
深入研究源代码揭示了一个未记录的方法withServerVariables
public function test_admin_something()
{
$user = factory(User::class)->create();
$response = $this
->withServerVariables(['entitlement' => 'admin'])
->actingAs($user)
->get('/admin/somewhere');
$response->assertStatus(200);
}
Run Code Online (Sandbox Code Playgroud)