2017-05-11 1 views
0

comment écrire le test pour cette fonction? comment tester la demande-ajax() ??écrire unité demande de test-> 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('/'); 
} 

je teste la fonction comme celui-ci

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

mais son pas voir request-> ajax?

Répondre

0

Pour tester les requêtes ajax, vous pouvez implémenter cette fonction dans votre classe TestCase. Votre requête nécessite l'en-tête HTTP_X-Requested-With.

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

Maintenant, vous pouvez tester vos classes

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

Rappelez-vous: ce n'est pas des tests unitaires.

+0

la méthode de route est obtenir ainsi il ne sera pas poster droit? – flower

+0

Et que faut-il remplir dans $ route = '' et inside parameters = [] ?? – flower

+0

Oui, l'acheminement dans cette méthode est la cible POST. Les paramètres sont facultatifs - regardez l'exemple. :) –