2017-05-11 12 views
0

この関数のテストを書く方法は? request-ajax()をテストするには?書き込みユニットテストリクエスト - > ajax()laravel

public function getChangeLoc(Request $request, $loc) 
{ 
    if ($request->ajax()) { 

     if(!in_array($loc, config('loc.available'))) { 
      return response()->json([ 
       'status' => 'ERROR', 
       'message' => 'Not available' 
      ]); 
     } 
     Session::put('locale', $loc); 

     return response()->json([ 
      'status' => 'OK', 
      'loc' => $loc, 
     ]); 
    } 

    if(!in_array($loc, config('loc.available'))) { 
     return Redirect::to('/?unknown-loc); 
    } 
    Session::put('loc', $loc); 

    if(filter_var($request->input('redirect_url', ''), FILTER_VALIDATE_URL)) { 
     return Redirect::to($request->input('redirect_url')); 
    } 

    return Redirect::to('/'); 
} 

私はこの

  $this->visit('/loc/en') 
       ->seePageIs('/admin/client') 

のような機能をテストするが、その要求 - >アヤックス見えませんか?

答えて

0

ajaxリクエストをテストするには、このメソッドをTestCaseクラスに実装することができます。リクエストにはHTTP_X-Requested-Withヘッダーが必要です。

protected function ajaxPost($route = '', array $parameters = []) 
{ 
    return empty($route) ? null : $this->json(
     'post', 
     $route, 
     $parameters, 
     ['HTTP_X-Requested-With' => 'XMLHttpRequest'] 
    ); 
} 

今、あなたはあなたのクラスをテストすることができ

$this->ajaxPost(route('your.route'), ['foo' => 'bar'])->seeJson([ 
    'is_ok' => true, 
]); 

は覚えている:それは、ユニットテストではありません。

+0

ルートメソッドが取得されるので、ポスト権が得られませんか? – flower

+0

そして、$ route = ''とinside parameters = [] ??の中に何を書き込む必要がありますか? – flower

+0

はい、このメソッドのルートはPOSTターゲットです。パラメータはオプションです。例を見てください。 :) –