3
5

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 3 years have passed since last update.

Laravelで認証付きAPIの実装をUnitテスト

Posted at
  • Windows 10
  • PHP 7.4.5
  • Laravel Framework 7.9.2

LaravelでのAPIサーバー開発において、認証つきサービスの試験をUnitテストで実装します。
JWT認証の構築や、Unitテストの準備などについては、それぞれ下記の記事をご参照ください。

このサーバーをベースにして、認証中にアクセスできるAPIhttp://localhost/api/meへアクセスし、ユーザー情報を取得するテストコードを実装したいと思います。

テストコードの前処理でログインする

  1. ログインユーザーを作成
  2. ログインAPIでアクセストークン取得
  3. アクセストークンを変数に保存しておく
ExampleFutureTest.php
<?php

namespace Tests\Feature;

use Illuminate\Foundation\Testing\RefreshDatabase;
use Illuminate\Foundation\Testing\WithFaker;
use Illuminate\Support\Facades\Hash;
use Tests\TestCase;
use App\User;

class ExampleFeatureTest extends TestCase
{
    use RefreshDatabase;

    private $accessToken = null;

    protected function setUp(): Void // ※ Voidが必要
    {
        // 必ずparent::setUp()を呼び出す
        parent::setUp(); 
        // 1.ログインユーザー作成
        User::create([
            'name' => 'sample user',
            'email' => 'sample@sankosc.co.jp',
            'password' => Hash::make('sample123'),
        ]);
        // 2.ログインAPIでアクセストークン取得
        $response = $this->post('/api/login', [
            'email' => 'sample@sankosc.co.jp',
            'password' => 'sample123'
        ]);
        $response->assertOk();
        // 3.アクセストークンを変数に保存しておく
        $this->accessToken = $response->decodeResponseJson('access_token');
    }
}

認証が必要なAPIのテストケースを実装する

  • 認証が必要なAPIにアクセスするときにヘッダにアクセストークンを含める
ExampleFutureTest.php
    /**
     * @test
     * @group testing
     */
    public function getWithAuth()
    {
        $response = $this->get('/api/me', [
            'Authorization' => 'Bearer '.$this->accessToken
        ]);
        $response->assertOk()->assertJsonFragment([
            'name' => 'sample user'
        ]);
    }

テスト実行

> .\vendor\bin\phpunit --group=testing
PHPUnit 8.5.4 by Sebastian Bergmann and contributors.

.                                                                   1 / 1 (100%)

Time: 766 ms, Memory: 28.00 MB

OK (1 test, 3 assertions)

3
5
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
3
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?