Laravel มาพร้อมกับฟีเจอร์ที่ยอดเยี่ยมมากมาย แต่หนึ่งในรายการโปรดของฉันคือความง่ายในการทดสอบแอปพลิเคชันของคุณ
การยืนยันแท็ก Laravel มีเป้าหมายเพื่อทำให้ฟังก์ชันการทดสอบ HTTP ที่น่าทึ่งซึ่ง Laravel นำเสนอมีประสิทธิภาพมากยิ่งขึ้นโดยการเพิ่มการยืนยันที่เป็นประโยชน์สำหรับแท็ก HTML
บ่อยครั้งที่ฉันต้องการยืนยันคำตอบที่มีองค์ประกอบบางอย่าง (เช่น: องค์ประกอบ Vue พร้อมอุปกรณ์ประกอบฉากบางอย่าง) แต่ไม่ต้องการให้บรรทัดใหม่และช่องว่างอื่น ๆ มีความสำคัญ การใช้เมธอดเช่น $response->assertSee(...)
ไม่เหมาะสำหรับกรณีการใช้งานเฉพาะนี้ Laravel Dusk ไม่ใช่ตัวเลือกที่ต้องการเนื่องจากอาจช้าและบางครั้งก็เปราะบาง
composer require --dev mikerogne/laravel-tag-assertions
เมื่อติดตั้งแล้ว อินสแตนซ์ TestResponse ของคุณก็สามารถเข้าถึงการยืนยันใหม่ได้แล้ว ดูด้านล่างสำหรับการใช้และตัวอย่าง
$selector คือชื่อของแท็กที่คุณต้องการจับคู่ คุณสามารถเจาะจงได้ตามที่คุณต้องการ $attributes คืออาร์เรย์ของแอตทริบิวต์ที่แท็กต้องมี
เรียบง่าย | เฉพาะเจาะจงยิ่งขึ้น |
---|---|
ปุ่ม | button.btn.btn-ค่าเริ่มต้น |
ก | [บทบาท=แท็บ] |
หากคุณระบุการโทรกลับ พารามิเตอร์สามตัวจะถูกส่งไป:
button
หรือ a
["class" => "btn btn-default"]
บางครั้งเราสนใจเพียงว่าแท็กที่มีเนื้อหาเฉพาะอยู่บนหน้า กรณีการใช้งานทั่วไปสำหรับสิ่งนี้คือช่องพื้นที่ข้อความ
$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. ' );
}
}
รหัสนี้เป็นซอฟต์แวร์โอเพ่นซอร์สที่ได้รับอนุญาตภายใต้ใบอนุญาต MIT