ホームページ > バックエンド開発 > PHPチュートリアル > PHPUnit を使用して Laravel で DOM をテストする

PHPUnit を使用して Laravel で DOM をテストする

王林
リリース: 2024-07-22 09:06:42
オリジナル
643 人が閲覧しました

Test Your DOM in Laravel with PHPUnit

PHPUnit には、AssertSee や AssertSeeText などの機能が付属しており、どちらの場合も特定のテキストに対してアサートでき、HTML タグをアサートするには、いくつかのカスタム機能を使用してこれらの機能に依存します。これらをもう少し磨くように努めます。

使用例

一部のフォームが CSRF トークンを生成することをテストする必要があります。

基本的な解決策

Laravel CSRF トークン ディレクティブは次のような入力を生成します:

<input type="hidden" name="_token" value="random_generated_token" ...>
ログイン後にコピー

生成されたトークンはリクエスト間で変化するため、生成されたトークン値をテストするつもりはありません。代わりに、必要な属性の一部を備えた入力が存在することをアサートします。PHPUnitassertSee には値をエスケープするための 2 番目のパラメータがあるため、次のようなことをしてください:

$this
    ->get("contact-us")
    ->assertSee([
        '<input name="some_database_column"'
    ], false);
ログイン後にコピー

反復の改善

これで解決策は解決しますが、おそらく、より多くの場合にこれを使用するより良い方法があるので、「希望的観測」アプローチを使用して書くと、私の目的のコードは次のようになります。

$this->get("contact-us")
    ->assertHtml('input', [
        "type" => "hidden",
        "name" => "_token",
])
ログイン後にコピー

これは、タグ名と属性の配列を渡すだけで複数のケースで機能するアサーションを追加するので便利です

AppServiceProvider またはその他のカスタム プロバイダーの TestResponse クラスにカスタム マクロを追加することで、Laravel に次のようなものを追加できます。

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);
});
ログイン後にコピー

これで、タグと属性の存在をテストして DOM をテストできるようになりました。

ララベリッシュなやり方を目指して

この場合、少し先に進むことができます。アプリ内の複数のフォームでフォームを CSRF トークンとしてアサートする必要があるため、マクロを利用してさらに多くのアサーションを作成できます。この場合は予想どおりです。 HTML タグと属性は変更されません。次のようなものを追加できます:

TestResponse::macro('assertCSRFTokenExists', function () {
    $this->assertHtml('input', [
        "type" => "hidden",
        "name" => "_token",
    ]);
});
ログイン後にコピー

このアサーションは短く、再利用可能で、読みやすく、使いやすいです:

$this->get("contact-us")->assertCSRFTokenExists();
ログイン後にコピー

より強力なアサーションについては、次のような優れたパッケージを検討する必要があります。

sinnbeck/laravel-dom-assertions

これがテストに基本的な DOM アサーションを追加するのに役立つことを願っています

以上がPHPUnit を使用して Laravel で DOM をテストするの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:dev.to
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート