JavaScriptを有効にしてください

【PHPUnit】メソッド内で連続でPOST、GETなどの送信すると前のログイン情報を引き継いでしまう?

 ·  ☕ 2 分で読めます

連続でPOST、GETなどの送信すると前のログイン情報を引き継いでしまう?

PHPUnit でメソッド内で連続で POSTGETなどの送信すると前のログイン情報を引き継いでしまう?現象を確認しました。
テストの都合上 PHPUnit で1メソッド内で連続で POSTGET など行いました。
※通常ではログイン状態確認テストと未ログイン状態確認テストなど別に書くと思われますが特殊なケースです。

そうすると何故か以下のような現象を確認しました。
・未ログインで送信 → ログイン送信 → 未ログインで接続
・ログイン送信 → 未ログイン送信 → ログインで接続

なぜか最初に送信した状態をを引き継いでいました。

確認環境

  • PHP 7.4
  • PHPUnit 9,5
  • Laravel 6.2

失敗コード

ログイン後のステータスコードを確認後に、ログインしてステータスを確認するというテストです。
以下のようなコードですと何故かログアウトされていませんでした。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<?php 

namespace Tests\Feature\Sample;

use PHPUnit\Framework\TestCase;

class SampleTest extends TestCase
{
    /**
     * @test
     */
    public function getTest()
    {
        
        // ログイン
        Auth::loginUsingId(1);
        // ユーザページ
        $response = $this->get('/user');
        // ユーザページなのでログインでは200
        $response->assertStatus(200);

        // ログアウト
        Auth::logout();
        // ユーザページ
        $response = $this->get('/user');
        // ユーザページなので未ログインでは403
        $response->assertStatus(403);
    }
}

何故かログアウトしてもログイン状態として判定されて 403 にならずに 200 になって失敗します。

サンプルコード

何故かログアウトしてもログイン状態として判定されるため、色々考えてセッション破棄などもしましたがテストの中で保存しているようです。
ただこれを特定するのも時間がかかるため少々力技で解決しました。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
<?php 

namespace Tests\Feature\Sample;

use PHPUnit\Framework\TestCase;

class SampleTest extends TestCase
{
    /**
     * @test
     */
    public function getTest()
    {
        
        // ログイン
        Auth::loginUsingId(1);
        // ユーザページ
        $response = $this->get('/user');
        // ユーザページなのでログインでは200
        $response->assertStatus(200);

        // 初期化
        $this->setUp();

        // ログアウト
        Auth::logout();
        // ユーザページ
        $response = $this->get('/user');
        // ユーザページなので未ログインでは403
        $response->assertStatus(403);
    }
}

setUp() を使用して初期化します。
こうすることによってテストの初期化が走ってどこかに残ったセッションのデータを破棄します。

参考

共有

こぴぺたん
著者
こぴぺたん
Copy & Paste Engineer