Laravel hadir dengan sejumlah fitur luar biasa, tetapi salah satu favorit saya adalah betapa mudahnya menguji aplikasi Anda.
Laravel Tag Assertions bertujuan untuk menjadikan fungsionalitas pengujian HTTP luar biasa yang ditawarkan Laravel menjadi lebih kuat dengan menambahkan pernyataan berguna untuk tag HTML.
Seringkali saya ingin menegaskan bahwa respons mengandung elemen tertentu (yaitu: komponen Vue dengan props tertentu), tetapi tidak ingin baris baru dan spasi lainnya menjadi penting. Menggunakan metode seperti $response->assertSee(...)
tidak ideal untuk kasus penggunaan khusus ini. Laravel Dusk juga bukan pilihan yang diinginkan karena lambat dan terkadang rapuh.
composer require --dev mikerogne/laravel-tag-assertions
Setelah terinstal, instance TestResponse Anda sekarang memiliki akses ke pernyataan baru. Lihat di bawah untuk penggunaan & contoh.
$selector adalah nama tag yang ingin Anda cocokkan. Anda bisa mendapatkan sespesifik yang Anda inginkan. $attributes adalah serangkaian atribut yang harus dimiliki tag.
Sederhana | Lebih Spesifik |
---|---|
tombol | button.btn.btn-default |
A | a[peran=tab] |
Jika Anda menentukan callback, tiga parameter akan diteruskan ke callback tersebut:
button
atau a
["class" => "btn btn-default"]
.Terkadang kami hanya peduli bahwa tag dengan konten tertentu ada di halaman. Kasus penggunaan umum untuk ini adalah bidang textarea.
$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. ' );
}
}
Kode ini adalah perangkat lunak sumber terbuka yang dilisensikan di bawah lisensi MIT.