Laravel est livré avec un certain nombre de fonctionnalités impressionnantes, mais l'une de mes préférées est la facilité avec laquelle il facilite le test de votre application.
Laravel Tag Assertions vise à rendre l'incroyable fonctionnalité de tests HTTP offerte par Laravel encore plus puissante en ajoutant des assertions utiles pour les balises HTML.
J'ai souvent voulu affirmer qu'une réponse contenait certains éléments (c'est-à-dire : un composant Vue avec certains accessoires), mais je ne voulais pas que les nouvelles lignes et autres espaces aient de l'importance. L'utilisation de méthodes telles que $response->assertSee(...)
n'est pas idéale pour ce cas d'utilisation particulier. Laravel Dusk n'était pas non plus une option souhaitable car il peut être lent et parfois fragile.
composer require --dev mikerogne/laravel-tag-assertions
Une fois installées, vos instances TestResponse ont désormais accès à de nouvelles assertions. Voir ci-dessous pour l'utilisation et les exemples.
$selector est le nom d'une balise à laquelle vous souhaitez faire correspondre. Vous pouvez être aussi précis que vous le souhaitez. $attributes est soit un tableau d'attributs que la balise doit avoir.
Simple | Plus spécifique |
---|---|
bouton | bouton.btn.btn-default |
un | un[rôle=onglet] |
Si vous spécifiez un rappel, trois paramètres lui seront transmis :
button
ou a
.["class" => "btn btn-default"]
.Parfois, nous nous soucions uniquement de la présence d'une balise avec un contenu spécifique sur la page. Un cas d’utilisation courant est un champ de zone de texte.
$response->assertSeeTagContent('textarea[name=about]', $user->about);
< body >
< h1 > Contrived Example h1 >
< form >
< p >
< label > First Name label >
< input type =" text " name =" first_name " value =" {{ old('first_name') }} " >
p >
< p >
< label > Last Name label >
< input type =" text " name =" last_name " value =" {{ old('last_name') }} " >
p >
< p >
< label > Email label >
< input type =" text " name =" email " value =" {{ old('email') }} " >
p >
< p >
< button type =" submit " > Register button >
p >
form >
body >
namespace Tests Feature ;
class ExampleTest extends TestCase
{
/ * * @ test * /
public function uses_old_input_when_validation_fails ()
{
$ data = [
' first_name ' => ' John ' ,
' last_name ' => ' Doe ' ,
' email ' => '' , // oops !
];
$ response = $ this -> post ( ' /register ' , $ data );
$ response -> assertSeeTag ( ' input[name=first_name] ' , [
' value ' => $ data [ ' first_name ' ],
]);
$ response -> assertSeeTag ( ' input[name=last_name] ' , [
' value ' => $ data [ ' last_name ' ],
]);
}
}
< body >
< h1 > Another Contrived Example h1 >
< blog-posts
:posts =" {{ $posts->toJson() }} "
> blog-posts >
body >
namespace Tests Feature ;
class VueTest extends TestCase
{
/ * * @ test * /
public function lists_blog_posts ()
{
$ posts = factory ( App Post::class, 5 )-> create ();
$ response = $ this -> get ( ' / ' , $ data );
$ response -> assertSeeTagContent ( ' h1 ' , ' Another Contrived Example ' );
$ response -> assertSeeTag ( ' blog-posts ' , [
' :posts ' => e ( $ posts -> toJson ()),
]);
}
}
< body >
< h1 > Callback Example h1 >
< h2 class =" section-title " data-foobar =" bazburk " >
Product Review
h2 >
< p class =" summary " > Lorem ipsum dolor sit amet, consectetur adipiscing elit. p >
body >
namespace Tests Feature ;
class CallbackTest extends TestCase
{
/ * * @ test * /
public function shows_product_review ()
{
$ response = $ this -> get ( ' / ' , $ data );
$ response -> assertSeeTag ( ' h2 ' , function ( $ tag , $ attributes , $ content ) {
// $ tag - > "h2"
// $ attributes - > [ 'class' = > 'section-title' , 'data-foobar' = > 'bazburk' ]
// $ content - > Product Review ( but including the whitespace !)
return Illuminate Support Str:: contains ( $ content , ' Product Review ' );
});
$ response -> assertSeeTagContent ( ' p.summary ' , ' Lorem ipsum dolor sit amet, consectetur adipiscing elit. ' );
}
}
Ce code est un logiciel open source sous licence MIT.