Laravel viene con una serie de características increíbles, pero una de mis favoritas es lo fácil que hace probar tu aplicación.
Laravel Tag Assertions tiene como objetivo hacer que la increíble funcionalidad de pruebas HTTP que ofrece Laravel sea aún más poderosa al agregar aserciones útiles para etiquetas HTML.
Con frecuencia he querido afirmar que una respuesta contiene ciertos elementos (es decir, un componente Vue con ciertos accesorios), pero no quería que las nuevas líneas y otros espacios en blanco importaran. Usar métodos como $response->assertSee(...)
no es ideal para este caso de uso particular. Laravel Dusk tampoco era una opción deseable porque puede ser lento y a veces frágil.
composer require --dev mikerogne/laravel-tag-assertions
Una vez instaladas, sus instancias de TestResponse ahora tienen acceso a nuevas afirmaciones. Consulte a continuación el uso y los ejemplos.
$selector es el nombre de una etiqueta que desea hacer coincidir. Puedes ser tan específico como quieras. $attributes es una matriz de atributos que debe tener la etiqueta.
Simple | Más específico |
---|---|
botón | botón.btn.btn-default |
a | un[rol=pestaña] |
Si especifica una devolución de llamada, se le pasarán tres parámetros:
button
o a
["class" => "btn btn-default"]
.A veces solo nos importa que en la página haya una etiqueta con contenido específico. Un caso de uso común para esto es un campo de área de texto.
$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. ' );
}
}
Este código es un software de código abierto con licencia MIT.