2016-10-11 4 views
2

5.3에서 소개 된 Passport를 통해 보호되는 작은 Laravel API를 설정했습니다. 지금까지 모든 것이 잘 작동하고 있습니다.Laravel 5.3 보호 API 테스트

API를 소비하는 사람이 유일하므로 API 토큰을 생성하고 처리하기 위해 웹 미들웨어 그룹에 \Laravel\Passport\Http\Middleware\CreateFreshApiToken::class을 추가하기 만하면됩니다.

제 질문 사항 : 응용 프로그램 테스트에서 토큰을 어떻게 처리합니까? actingAs($user) 마술처럼 사용자의 토큰을 요청에 추가하지 않는 것처럼 보입니다. $this->withoutMiddleware();을 사용할 수 있지만 인증을 담당하는 미들웨어뿐만 아니라 모든 미들웨어가 비활성화됩니다.

해결 방법에 대한 아이디어가 있으십니까?

도움 주셔서 감사합니다. 기존 Laravel 여권 검사를 살펴 경우

답변

1

훨씬 쉽게 솔루션은 actingAs() 방법에 api 경비를 추가하는 것입니다

$this->actingAs($user, 'api'); 
+0

정확히 그 일을 마치고 정답입니다. 그것은 문서에서도 마찬가지입니다. 확실하지 않은 이유는, 내가 약 1 년 전에이 질문을했을 때 나는 그것을 보지 못했습니다. :) – DerJacques

0

, 이것은 당신에게 명확하게 테스트하는 방법에 대한 충분한 정보를 제공해야하는 것은 :

https://github.com/laravel/passport/tree/master/tests

+0

감사 라이언! Passport 테스트는 확실히 내 이해에 도움이되었지만 여전히 성공적인 테스트 호출을 할 수 없었습니다. 내 테스트가 다음과 같이 보일 때 : '$ user = factory (\ App \ User :: class) -> create(); \t \t $ this-> actingAs ($ user) -> json ('GET', '/ api/products /')' 어떻게'/ api/products'에 auth-middleware를 전달할 수 있습니까? 다시 도움 주셔서 감사합니다. – DerJacques

2

나는 마침내이 답변에 따라 구축하여 작업을했다 :

/** 
*@test 
*/ 
public function Create_an_access_token() 
{ 

    $clientRepository = new ClientRepository(); 
    $client = $clientRepository->createPersonalAccessClient(
     null, 'Test Personal Access Client', 'http://localhost' 
    ); 

    DB::table('oauth_personal_access_clients')->insert([ 
     'client_id' => $client->id, 
     'created_at' => new DateTime, 
     'updated_at' => new DateTime, 
    ]); 

    $user = factory(User::class)->create(); 

    $token = $user->createToken('TestToken')->accessToken; 

    $header = []; 
    $header['Accept'] = 'application/json'; 
    $header['Authorization'] = 'Bearer '.$token; 

    $this->json('GET', '/api/user', [], $header) 
      ->seeJson([ 
      'id' => $user->id, 
      'email' => $user->email, 
      'name' => $user->name, 
    ]); 
} 
: 상기 포스트의 저자에서 붙여 https://laracasts.com/discuss/channels/testing/passport-personal-access-token-unit-test

복사

관련 및 재사용 가능한 부분을 작은 도우미 클래스로 추출 했으므로 이제 테스트 코드는 다소 짧고 읽기 쉽습니다.

이렇게하면 비슷한 상황에있는 사람에게 도움이되기를 바랍니다.

+0

다행 당신이 그것을 해결! – Ryan

+0

설정 도중''$ this-> artisan ('passport : install');''을 호출 할 수도 있습니다. –