2017-07-12 2 views
0

ich ziemlich neu bin auf Unit-Tests und ich möchte versuchen, meine Login-Seite mein Ziel für dieses Gerät zu testen sind: -> wenn es in der Datenbank übereinstimmen -> zur Route umleiten ‚/‘ -> wenn nicht -> Umleitung auf Route ‚/ login‘Laravel Testing Login Credential mit phpunit + Multi-Prozess-

<?php 

namespace Tests\Feature; 

use App\Domain\Core\Models\User; 
use Illuminate\Support\Facades\Hash; 
use Illuminate\Support\Facades\Session; 
use Tests\TestCase; 
use Illuminate\Foundation\Testing\WithoutMiddleware; 
use Illuminate\Foundation\Testing\DatabaseMigrations; 
use Illuminate\Foundation\Testing\DatabaseTransactions; 

class userTest extends TestCase 
{ 
    use DatabaseMigrations; 
    /** 
    * A basic test example. 
    * 
    * @return void 
    */ 
    public function testLoginTrue() 
    { 
     $credential = [ 
      'email' => '[email protected]', 
      'password' => 'user' 
     ]; 
     $this->post('login',$credential)->assertRedirect('/'); 
    } 

    public function testLoginFalse() 
    { 
     $credential = [ 
      'email' => '[email protected]', 
      'password' => 'usera' 
     ]; 
     $this->post('login',$credential)->assertRedirect('/login'); 
    } 
} 

, wenn ich auf TestLoginTrue testen, seine erfolgreiche Rückkehr zu ‚/‘ Aber wenn ich die TestLoginFalse versuchen ... es zurückgeben gleiche wie TestLoginTrue, sollte es auf '/ login' Route bleiben, Irgendeine Idee?

Plus Ich will versuchen, ob zu überprüfen, wenn ich bereits anmelden kann ich nicht die Login-Seite zugreifen, so meine Idee ist: public function testLoginTrue()

{ 
    $credential = [ 
     'email' => '[email protected]', 
     'password' => 'user' 
    ]; 
    $this->post('login',$credential) 
     ->assertRedirect('/') 
     ->get('/login') 
     ->assertRedirect('/'); 
} 

aber ... es gibt

1) Tests \ Eigenschaft \ Usertest :: testLoginTrue BadMethodCallException: Methode [get] existiert nicht auf Redirect.

Also, wie man es richtig macht?

Vielen Dank im Voraus

Antwort

0

Ich bin auch ein bisschen mit Laravel 5.4 Testfolge Fall Umleitungen fest.

Als Workaround können Sie überprüfen, . Auf diese Weise sollte es funktionieren:

public function testLoginFalse() 
{ 
    $credential = [ 
     'email' => '[email protected]', 
     'password' => 'incorrectpass' 
    ]; 

    $response = $this->post('login',$credential); 

    $response->assertSessionHasErrors(); 
} 

Auch in testLoginTrue() können Sie überprüfen, dass Sitzungsfehler fehlt:

$response = $this->post('login',$credential); 
$response->assertSessionMissing('errors'); 

hoffe, das hilft!

+0

danke für die Workaround :), es funktioniert perfekt. . . aber ich bin seltsam für die Umleitung Dinge ... der TestLoginFalse gibt den Fehler zurück, aber nicht entsprechend an den Controller umgeleitet .. wie auch immer wird bei Ihrem Workaround bleiben, danke: D –