2016-10-20 3 views
2

Ich versuche, meine api zu testen, die mit JWT_auth gemacht hat: https://github.com/tymondesigns/jwt-authLaravel Tests mit JWT-Auth

class UpdateTest extends TestCase 
{ 
    use DatabaseTransactions; 

    public $token; 

    public function signIn($data = ['email'=>'[email protected]', 'password'=>'secret']) 
    { 
     $this->post('api/login', $data); 
     $content = json_decode($this->response->getContent()); 
     $this->assertObjectHasAttribute('token', $content); 
     $this->token = $content->token; 

     return $this; 
    } 

    /** @test */ 
    public function a_user_updates_his_account() 
    { 
     factory(User::class)->create([ 
      'name'    => 'Test', 
      'last_name'   => 'Test', 
      'email'    => '[email protected]', 
      'mobile'   => '062348383', 
      'function'   => 'ceo', 
      'about'    => 'About me.....', 
      'corporation_id' => 1 
     ]); 

     $user = User::first(); 
     $user->active = 2; 
     $user->save(); 

     $this->signIn(); 

     $url = '/api/user/' . $user->slug . '?token=' . $this->token; 
     $result = $this->json('GET', $url); 
     dd($result); 
    } 
} 

Ergebnis ist immer:

The token could not be parsed from the request 

Wie bekomme ich diese T Arbeit !?

Quelle (https://github.com/tymondesigns/jwt-auth/issues/206)

+0

Wahrscheinlich, weil die die Middleware die Token von Authorization-Header liest, nicht indem er sie als Abfrageparameter anhängt:

/** * Simulate call api * * @param string $endpoint * @param array $params * @param string $asUser * * @return mixed */ protected function callApi($endpoint, $params = [], $asUser = '[email protected]') { $endpoint = starts_with($endpoint, '/') ? $endpoint : '/' . $endpoint; $headers = []; if (!is_null($asUser)) { $token = auth()->guard('api') ->login(\Models\User::whereEmail($asUser)->first()); $headers['Authorization'] = 'Bearer ' . $token; } return $this->json( 'POST', 'http://api.dev/' . $endpoint, $params, $headers ); } 

Und wird wie folgt verwendet. – JofryHS

+0

Ja, aber wie bekomme ich das zum Laufen? – Jamie

Antwort

1

Eine Möglichkeit, Ihre API in dieser Situation zu testen, besteht darin, die eigentliche Token-Verifizierung zu umgehen, aber Ihren Benutzer dennoch einzuloggen (falls Sie den Benutzer identifizieren müssen). Hier ist ein Ausschnitt der Hilfsmethode, die wir in unserer letzten API-basierten Anwendung verwendet haben.

$this->callApi('orders/list', [ 
     'type' => 'customers' 
    ]) 
    ->seeStatusOk() 
+0

Vielen Dank! – Jamie

1

Grundsätzlich ist es nicht wirklich eine Möglichkeit, für jetzt. Die falsche Anforderung, die während des Tests erstellt wird und an Laravel übergeben wird, löscht die Tokendaten.

Es wurde bereits in einer Ausgabe berichtet (https://github.com/tymondesigns/jwt-auth/issues/852), aber soweit ich weiß, gibt es noch keine Lösung.

+0

Also im Grunde ist es unmöglich für mich zu testen meine api -_- – Jamie

+0

Nichts ist unmöglich, aber um ehrlich zu sein, ich fand keine Möglichkeit, es zu tun - Sie könnten versuchen, den Fehler in tymon/jwt-auth obwohl zu beheben. Oder Sie können die Auth Middleware in Testumgebung deaktivieren und testen Sie die REST (Wortspiel beabsichtigt) Ihrer API – nXu

Verwandte Themen