يأتي Laravel مزودًا بعدد من الميزات الرائعة، ولكن إحدى الميزات المفضلة لدي هي مدى سهولة اختبار التطبيق الخاص بك.
تهدف Laravel Tag Assertions إلى جعل وظيفة اختبارات HTTP المذهلة التي تقدمها Laravel أكثر قوة عن طريق إضافة تأكيدات مفيدة لعلامات HTML.
في كثير من الأحيان كنت أرغب في التأكد من أن الاستجابة تحتوي على عناصر معينة (على سبيل المثال: مكون Vue مع دعائم معينة)، لكنني لم أرغب في أن تكون الأسطر الجديدة والمسافات البيضاء الأخرى مهمة. إن استخدام أساليب مثل $response->assertSee(...)
ليس مثاليًا لحالة الاستخدام المحددة هذه. لم يكن Laravel Dusk خيارًا مرغوبًا فيه أيضًا لأنه يمكن أن يكون بطيئًا وهشًا في بعض الأحيان.
composer require --dev mikerogne/laravel-tag-assertions
بمجرد التثبيت، تتمتع الآن مثيلات TestResponse بإمكانية الوصول إلى التأكيدات الجديدة. انظر أدناه للاستخدام والأمثلة.
$selector هو اسم العلامة التي تريد مطابقتها. يمكنك الحصول على ما تريد محددة. السمات $ هي إما مجموعة من السمات التي يجب أن تحتوي عليها العلامة.
بسيط | أكثر تحديدا |
---|---|
زر | Button.btn.btn-default |
أ | أ[دور=علامة التبويب] |
إذا قمت بتحديد رد اتصال، فسيتم تمرير ثلاثة معلمات إليه:
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.