2017-05-11 92 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') 

,但它不是看到請求 - > AJAX功能?

回答

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 =''和內部參數= []? – flower

+0

是的,此方法中的路由是POST目標。參數是可選的 - 查看示例。 :) –