laravel tag assertions
v2.0.2
Laravel에는 여러 가지 멋진 기능이 포함되어 있지만 제가 가장 좋아하는 기능 중 하나는 애플리케이션 테스트가 얼마나 쉬운지입니다.
Laravel Tag Assertions는 HTML 태그에 유용한 Assertion을 추가하여 Laravel이 제공하는 놀라운 HTTP 테스트 기능을 더욱 강력하게 만드는 것을 목표로 합니다.
나는 종종 응답에 특정 요소(예: 특정 props가 있는 Vue 구성 요소)가 포함되어 있다고 주장하고 싶었지만 줄 바꿈 및 기타 공백이 중요해지는 것을 원하지 않았습니다. $response->assertSee(...)
와 같은 방법을 사용하는 것은 이 특정 사용 사례에 적합하지 않습니다. Laravel Dusk는 느리고 때로는 취약할 수 있기 때문에 바람직한 옵션이 아니었습니다.
composer require --dev mikerogne/laravel-tag-assertions
일단 설치되면 TestResponse 인스턴스는 이제 새로운 어설션에 액세스할 수 있습니다. 사용법과 예시는 아래를 참조하세요.
$selector는 일치시키려는 태그의 이름입니다. 원하는만큼 구체적으로 얻을 수 있습니다. $attributes는 태그가 가져야 하는 속성의 배열입니다.
단순한 | 보다 구체적 |
---|---|
단추 | 버튼.btn.btn-기본 |
에이 | a[역할=탭] |
콜백을 지정하면 세 가지 매개변수가 전달됩니다.
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 라이선스에 따라 라이선스가 부여된 오픈 소스 소프트웨어입니다.