2016-04-22 18 views
15

私は、ラーベルルートmy.routeにリンクしているページ/my/example/pageにリンクがあります。外部サイトへのリダイレクトリンクのテスト

ルート

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

リンク/my/example/page

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

使用するHREFのURLを返しexampleControllerコントローラでこのコントローラ方法externalLinkこのルート/my/route/to/external/controller点を、上

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

私のテストは、私はclick()試験方法を使用するとき、私は常にエラーに

のSymfony \コンポーネント\ HttpKernel \例外の\ NotFoundHttpException

を取得

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

です。

私はこれを@expectedExceptionを使って捕まえることができますが、彼は私が別のページを見ることを期待しているので助けになりません。

私はまた(一緒にではなく)試みました。ブラウザの検査から

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

、URLがクリックされたとき、私は

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

どのように機能を外部サイトにとリダイレクトをクリックされたボタンをテストすることができますか?

+0

何あなたのルートが見えますか? – tptcat

+0

@tptcat質問を更新しました – myol

答えて

4

私は今、同様の問題で苦労しています。私はちょうどエンドポイントを直接テストすることをあきらめています。

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

あなたが直接テストすることができます何かにコントローラのロジックを移動:リンクがビューで適切な情報が含まれていることを

テスト...このようなソリューションを選びます。 Laravel\Socialite packageは、あなたがこれを行う場合には役立つかもしれないいくつかの興味深いテストを持っている...

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

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

はその後直接

$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

それをテストする簡単な方法ではなくvisitget方法を使用することです。

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

関連する問題