2016-04-22 26 views
15

Bir laravel rota my.route bağlanan bir sayfa /my/example/page bir bağlantı var link yönlendirir.Test harici sitelerde

Rota

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'); 
    } 
}  

bağlantı /my/example/page

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

kullanımı href için URL döner exampleController denetleyicisi bu kontrol yöntemi externalLink Bu yol /my/route/to/external/controller sayı, ilgili

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

Testim ben click() test yöntemi kullandığınızda

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

Ben sürekli hatayı

Symfony \ Component \ HttpKernel \ İstisna \ NotFoundHttpException

olsun.

Bu @expectedException kullanarak ama farklı sayfasını görmek için bekliyorum olarak onun yardımcı olmuyor yakalayabilirsiniz.

Ayrıca (birlikte değil) çalıştılar; url ben düğmesi tıkladım ve harici bir siteye yönlendirme ediliyor nasıl işlevsel test edebilirsiniz

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

olsun tıklandığında

tarayıcı muayene itibaren
->assertResponseStatus(200); 
->seePageIs('www.externalsite.com'); 
->assertRedirect(); 
->followRedirects(); 

?

+0

Ne rota neye benziyor? – tptcat

+0

@tptcat Soruyu güncelledim – myol

cevap

4

Şu anda benzer bir sorunla mücadele ediyorum ve son noktayı doğrudan test etmekten vazgeçtim.

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

doğrudan test edebilirsiniz şeye denetleyicisi mantığı Hareketli: link görünümünde doğru bilgiler içerdiğini

Testi ... Böyle bir çözüm olmayı seçmek. Laravel\Socialite package

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

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

Sonra o doğrudan

$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

basit bir yolu yerine visit ait get yöntemini kullanmaktır sınamak ... bunu yaparsanız yararlı olabilecek bazı ilginç testler vardır.

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