일부 양식이 CSRF 토큰을 생성하는지 테스트해야 합니다.
Laravel CSRF 토큰 지시문은 다음과 같은 입력을 생성합니다.
요청 간에 생성된 토큰이 변경되므로 생성된 토큰 값을 테스트하지 않을 것입니다. 대신 필요한 속성 중 일부와 함께 입력이 존재하는지 어설션할 것입니다. PHPUnit AssertSee에는 값을 이스케이프하는 두 번째 매개변수가 있으므로 다음을 수행할 수 있습니다. 다음과 같이 하세요:
<input type="hidden" name="_token" value="random_generated_token" ...>
반복 개선
$this ->get("contact-us") ->assertSee([ '<input name="some_database_column"' ], false);
이는 태그 이름과 속성 배열만 전달하여 여러 경우에 작동하는 어설션을 추가하므로 유용합니다
$this->get("contact-us") ->assertHtml('input', [ "type" => "hidden", "name" => "_token", ])
이제 태그와 속성의 존재 여부를 테스트하여 DOM을 테스트할 수 있습니다.
TestResponse::macro('assertHtml', function ($tag, $attributes) { $attributes = collect($attributes) ->map(function ($attributeValue, $attributeKey) { return "$attributeKey=\"$attributeValue\" "; }) ->values() ->implode("", ""); $htmlElement = "<$tag $attributes"; $this->assertSee([$htmlElement], false); });
이 경우 조금 더 나아갈 수 있습니다. 양식을 앱의 여러 형태로 CSRF 토큰으로 어설션해야 하므로 매크로를 사용하여 더 많은 어설션을 생성할 수 있습니다. 이 경우 예상대로 HTML 태그와 속성은 변경되지 않습니다. 다음과 같이 추가할 수 있습니다.
이 주장은 짧고, 재사용이 가능하며, 읽고 사용하기 쉽습니다.
TestResponse::macro('assertCSRFTokenExists', function () { $this->assertHtml('input', [ "type" => "hidden", "name" => "_token", ]); });
더 강력한 주장을 위해서는 다음과 같은 훌륭한 패키지를 고려해야 합니다.
$this->get("contact-us")->assertCSRFTokenExists();
이것이 테스트에 기본 DOM 어설션을 추가하는 데 도움이 되기를 바랍니다
위 내용은 PHPUnit을 사용하여 Laravel에서 DOM 테스트의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!