2016-04-22 9 views
15

Ich habe einen Link auf einer Seite /my/example/page, die Links zu einer Laravel-Route my.route.Testen Redirect-Links zu externen Websites

Strecke

Route::group(['middleware' => ['auth']], function() { 
    Route::group(['middleware' => ['Some\Custom\Auth\Middleware:1']], function() { 
     Route::match(['GET', 'POST'], '/my/route/to/external/controller', '[email protected]')->name('my.route'); 
    } 
}  

-Link auf die /my/example/page

<a href="/my/route/to/external/controller">Link</a> 

Diese Route /my/route/to/external/controller Punkte auf diese Controller Methode externalLink im exampleController-Controller, der die URL für den href kehrt zu verwenden

public function externalLink() 
{ 
    return $this->redirect->away('www.externalsite.com'); 
} 

Mein Test ist

$this->visit(/my/example/page) 
    ->click('Link') 
    ->assertRedirectedToRoute('my.route'); 

ich den Fehler ständig erhalten

Symfony \ Component \ HttpKernel \ Exception \ NotFoundHttpException

, wenn ich die click() Testmethode verwenden.

Ich kann dies mit @expectedException fangen, aber sein hilft nicht, da ich eine andere Seite zu erwarten erwarte.

Ich habe auch versucht (nicht zusammen);

->assertResponseStatus(200); 
->seePageIs('www.externalsite.com'); 
->assertRedirect(); 
->followRedirects(); 

Von Browser-Inspektion, wenn die URL ich

erhalten geklickt wird
http://www.example.com/my/route/to/external  302 
http://www.externalsite.com      200 

Wie kann ich die Taste Funktionstest und Umleitung auf eine externe Seite angeklickt werden?

+0

Wie sieht Ihre Route aussehen? – tptcat

+0

@tptcat Ich habe die Frage aktualisiert – myol

Antwort

4

Ich habe gerade mit einem ähnlichen Problem zu kämpfen, und ich habe gerade aufgegeben, den Endpunkt direkt zu testen. Die Entscheidung für eine Lösung wie diese ...

-Test, dass der Link richtige Informationen in der Ansicht enthält:

$this->visit('/my/example/page') 
    ->seeElement('a', ['href' => route('my.route')]); 

die Logik in der Steuerung etwas bewegen Sie direkt testen können. Die Laravel\Socialite package hat einige interessante Tests, die hilfreich sein könnten, wenn Sie dies tun ...

class ExternalLinkRedirect { 
    public function __construct($request){ 
     $this->request = $request; 
    } 

    public function redirect() 
    { 
     return redirect()->away('exteranlsite.com'); 
    } 
} 

es dann direkt testen

$route = route('my.route'); 
    $request = \Illuminate\Http\Request::create($route); 
    $redirector = new ExternalLinkRedirect($request); 
    $response = $redirector->redirect(); 
    $this->assertEquals('www.externalsite.com', $response->getTargetUrl()); 
2

Ein einfacher Weg ist statt visit die get Methode zu verwenden.

Ein Beispiel: $this->get('/facebook') ->assertRedirectedTo('https://www.facebook.com/Les-Teachers-du-NET-516952535045054');

Verwandte Themen