LaravelのHTTPテストのassertSeeで文字列がエスケープされないようにする

問題

LaravelのHTTPテストで、assertSeeやassertSeeTextを使って、HTMLの中に特定の文字列が含まれていることをテストすることがあります。

しかし、デフォルトでは、これらのメソッドはHTMLエスケープされた文字列を検索するため、意図した通りにテストが通らないことがあります。

例えば、次のようなコードを書いて、HTMLの中に<h1>hello</h1>の文字があるかどうかをテストすると、失敗します。

// コントローラーのサンプルアクション
public function index() {
    return view('welcome', ['message' => '<h1>hello</h1>']);
}

// テストケース
public function testExample() {
    $this->get('/')
        ->assertSee('<h1>hello</h1>');
}

この失敗の理由は、assertSee メソッドがデフォルトでHTMLエスケープされた文字列を検索するためです。

解決策

この問題に対処するには、assertSeeassertSeeTextメソッドに第二引数としてfalseを渡します。

これにより、メソッドはHTMLエスケープされた文字列の検索を行わなくなり、生のHTMLタグの存在を確認できるようになります。

// テストケース
public function testExample() {
    $this->get('/')
        ->assertSee('<h1>hello</h1>', false);
}

この変更により、LaravelはHTMLタグをエスケープせずにそのままの形でテスト対象の文字列として認識し、期待通りのテスト結果を得ることができます。

参考

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください