Comment tester les règles de demande de formulaire dans Laravel 5?

j'ai créé une classe de requête form et défini un tas de règles. Je voudrais maintenant tester ces règles pour voir si le comportement répond à nos attentes.

Comment pourrais-je écrire un test pour le réaliser?

un grand merci d'avance pour vos réponses!

mise à Jour: plus précisément, je voudrais écrire un test unitaire qui vérifierait par exemple si un email mal formaté réussit ou non la validation. Le problème est que je ne sais pas comment créer un nouveau instance de la demande avec une fausse entrée dedans.

8
demandé sur kant312 2015-04-22 13:22:40

2 réponses

vous devez avoir votre classe de demande de formulaire dans la fonction controller, par exemple

public function store(MyRequest $request)

maintenant, créez un formulaire HTML et essayez de le remplir avec des valeurs différentes. Si la validation échoue, vous obtiendrez des messages en session, si elle réussit, vous accéderez à la fonction controller.

quand Unit testing appelle alors l'url et ajoute les valeurs pour testing comme tableau. Laravel doc dit que cela peut être fait comme

$response = $this->call($method, $uri, $parameters, $cookies, $files, $server, $content);
3
répondu Margus Pala 2015-04-22 12:40:35

la réponse acceptée teste simultanément l'autorisation et la validation. Si vous voulez tester ces fonctions séparément, puis vous pouvez faire ceci:

test rules():

$attributes = ['aa' => 'asd'];
$request = new MyRequest();
$rules = $request->rules();
$validator = Validator::make($attributes, $rules);
$fails = $validator->fails();
$this->assertEquals(false, $fails);

test authorize():

$user = factory(User::class)->create();
$this->actingAs($user);
$request = new MyRequest();
$request->setContainer($this->app);
$attributes = ['aa' => 'asd'];
$request->initialize([], $attributes);
$this->app->instance('request', $request);
$authorized = $request->authorize();
$this->assertEquals(true, $authorized);

vous devriez créer quelques méthodes d'aide dans la classe de base pour garder les tests secs.

12
répondu Martins Balodis 2015-12-21 21:28:18