8
10

More than 3 years have passed since last update.

Laravel ログインテスト

Posted at

Laravel Unitテスト

 ポートフォリオを作成して、ユニットテストを実行するまでの一連の流れを備忘録として記述します。
 作成したポートフォリオでは初期画面からホーム画面に遷移するのにログインする必要があるシステムでした。コントローラーのテストで下記のように実行してもエラーが表示された為、ログインテストを別で作成してモデルのテストを実行しました。

pubulic function testBasicTest() {
    $this->get('/home')->assertStatusOk();
    /// /homeにはログインが必要な為アクセスできない
}

1.テスト用のDatabaseの準備

今回はMySQLを使用しました。使用するデータベースに応じてテスト用のデータベースを準備。

$ mysql -uroot -p
$ 🔓(password入力)
mysql> create database データベース名
mysql> show databases
    今回作成したデータベースがあるか確認
mysql> exit

Config/database.phpの'connections'にテスト用のデータベースの設定を追加。

'testing' => [
            'driver' => 'mysql',
            'url' => env('DATABASE_URL'),
            'host' => env('DB_HOST', '127.0.0.1'),
            'port' => env('DB_PORT', '3306'),
            'database' => "作成したデータベース名",
            'username' => env('DB_USERNAME', 'forge'),
            'password' => env('DB_PASSWORD', ''),
            'unix_socket' => env('DB_SOCKET', ''),
            'charset' => 'utf8mb4',
            'collation' => 'utf8mb4_unicode_ci',
            'prefix' => '',
            'prefix_indexes' => true,
            'strict' => true,
            'engine' => null,
            'options' => extension_loaded('pdo_mysql') ? array_filter([
                PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'),
            ]) : [],
        ],

phpunit.xmlのタグ内に下記を追加。

    <server name="DB_CONNECTION" value="mysql"/>
    <server name="DB_DATABASE" value="[データベース名]"/>

2.ファクトリーを準備する

 今回作ったポートフォリオはLaravelに標準で準備されているUserテーブルを使用した為、変更しませんが追加などしている場合は変更する。(database/factories/UserFactory.php)

3.テスト用ファイルの作成

下記コマンドを実行するとtests/Featureにテスト用ファイルが作成されます。

$ php artisan make:test LoginTest

作成されたLoginTest.phpを下記に変更

<?php

namespace Tests\Feature;

use Illuminate\Foundation\Testing\RefreshDatabase;
use Illuminate\Foundation\Testing\WithFaker;
use Illuminate\Foundation\Testing\WithoutMiddleware;
use Tests\TestCase;
use App\User;
use Auth;

class LoginTest extends TestCase
{
    /**
     * A basic feature test example.
     *
     * @return void
     */
    public function testExample()
    {
        $user = factory(User::class)->create([
            'password'  => bcrypt('laraveltest123')
            //パスワードは好きな言葉で大丈夫です
        ]);

        // 認証されないことを確認
        $this->assertFalse(Auth::check());

        // ログインを実行
        $response = $this->post('login', [
            'email'    => $user->email,
            'password' => 'laraveltest123'
            //先ほど設定したパスワードを入力
        ]);

        // 認証されていることを確認
        $this->assertTrue(Auth::check());

        // ログイン後にホームページにリダイレクトされるのを確認
        $response->assertRedirect('home');
     //作成したサイトでログイン後にリダイレクトされるルート情報を記述
    }
}

4.マイグレーションの実行

 下記コマンドを実行するとテスト用のデータベースにテーブルが作成されます。
--database==testingを忘れないでください。この記述によりdatabase.phpに用意したtesing設定で実行されます。

$ php artisan migrate:refresh --database==testing

5.テストの実行

$ vendor/bin/phpunit

以上でテスト完了です!
作成したデータベースのUserテーブルには新規レコードが登録されていて正しくログイン出来ています。

8
10
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
8
10