2017-06-19 47 views
0

我正在使用shibboleth apache模塊進行聯合單點登錄。它將$_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對象的測試過程中被忽略其它服務器變量。我也不能嘲笑請求façade,per the documentation

+1

嘗試改變' - >獲取( '/管理/某處')'來' - >調用( 'GET', '/管理/某處', ['entitlement'=>'admin']);'。請參閱:https://laravel.com/docs/5.2/testing#custom-http-requests – btl

+0

您正在使用哪個測試套件以及哪個版本。 – Ohgodwhy

+0

@Ohgodwhy phpunit 5.7.20 laravel 5.4.24 –

回答

0

挖掘到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); 
} 
相關問題