2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

[PHP]PHPUnitのassertSeeをリダイレクト先でも行いたい。

Last updated at Posted at 2022-02-28

きっかけ

laravelにてfeatureテストを記述していたときに、post処理後のリダイレクト先でフラッシュメッセージを assertSee したくなった。

assertSee について

レスポンス内に指定の文字列があるかを確認してくれる。
基本的なアサートの一つ。

public function test_テキストチェック()
{
  $response = $this->get('user');
  // /user に "user一覧" と記述されていればテストが通る
  $response->assertStatus(200)->assertSee('user一覧');
}

この他にも、文字列を順番に記述されているかを確認してくれる「assertSeeInOrder」など、便利なものがいくつか存在します。
詳しくは、下記をご覧ください。

問題

便利な assertSee ですが、下記のような記述ではリダイレクト先までは見てくれません。。

public function test_テキストチェック()
{
  $response = $this->post('user', [
    'name' => 'hello',
    'email' => 'world@example.com',
  ]);
  // redirect前のテキストを確認してしまうので、テストは通らない。
  $response->assertStatus(302)->assertSee('user一覧');
}

解決策

2パターンの解決策があるみたいです。

パターン1

post後に再度getを行う。
この場合でもflashメッセージは正しく確認できるみたいです。

public function test_テキストチェック()
{
  $response = $this->post('user', [
    'name' => 'hello',
    'email' => 'world@example.com',
  ]);

  $response->assertStatus(302);

  $this->get('user')->assertSee('user一覧');
}

パターン2

followRedirectsを使用する。
こちらも問題なくflashメッセージの確認ができます。

public function test_テキストチェック()
{
  $response = $this->post('user', [
    'name' => 'hello',
    'email' => 'world@example.com',
  ]);

  $response->assertStatus(302);

  $this->followRedirects($response)->assertSee('user一覧');
}

参考

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?