BETA

laravel7でテスト用DBの設定につまづいた

投稿日:2020-05-10
最終更新:2020-05-10

laravel7でテスト用DBの設定に詰まって半日消えました。
なかなか検索しても見当たらなかったので、残しておきます。

テスト用のDBを設定するには2つファイルを書き換えるところがあります。
・phpunit.xml
・config/database.php
この二つです。

まず、config/database.phpに書き加えます。
config/database.phpを見ていくと、以下のような部分があります。
この'connection'の中に、今回は「test」というテスト用DBの設定を付け足します。
といっても、mysqlをそのままコピーして、database,username,passwordを設定した値に書き換えるだけです。これ以外を設定で変更した人は変更してください。

/*  
    |--------------------------------------------------------------------------  
    | Database Connections  
    |--------------------------------------------------------------------------  
    |  
'connections' => [  

        'sqlite' => [  
            'driver' => 'sqlite',  
            'url' => env('DATABASE_URL'),  
            'database' => env('DB_DATABASE', database_path('database.sqlite')),  
            'prefix' => '',  
            'foreign_key_constraints' => env('DB_FOREIGN_KEYS', true),  
        ],  
'mysql' => [  
            'driver' => 'mysql',  
            'url' => env('DATABASE_URL'),  
            'host' => env('DB_HOST', '127.0.0.1'),  
            'port' => env('DB_PORT', '3306'),  
            'database' => env('DB_DATABASE', 'forge'),  
            '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'),  
            ]) : [],  
        ],  
'test' => [  
            'driver' => 'mysql',  
            'url' => env('DATABASE_URL'),  
            'host' => env('DB_HOST', '127.0.0.1'),  
            'port' => env('DB_PORT', '3306'),  
            'database' => 'test_laravel',  
            'username' => 'hogehoge',  
            'password' => 'hogehoge',  
            '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は以下の部分に変更を加えていきます。

<php>  
        <server name="APP_ENV" value="testing"/>  
        <server name="BCRYPT_ROUNDS" value="4"/>  
        <server name="CACHE_DRIVER" value="array"/>  
        <server name="DB_CONNECTION" value="sqlite"/>  
        <server name="DB_DATABASE" value=":memory:"/>  
        <server name="MAIL_MAILER" value="array"/>  
        <server name="QUEUE_CONNECTION" value="sync"/>  
        <server name="SESSION_DRIVER" value="array"/>  
</php>  

このDB_CONNECTIONを先ほどconfig/database.phpで設定した名前にし、DB_DATABASEにはテスト用に作成したデータベースの名前に変更します。

<php>  
        <server name="APP_ENV" value="testing"/>  
        <server name="BCRYPT_ROUNDS" value="4"/>  
        <server name="CACHE_DRIVER" value="array"/>  
        <server name="DB_CONNECTION" value="test"/>  
        <server name="DB_DATABASE" value="test_laravel"/>  
        <server name="MAIL_MAILER" value="array"/>  
        <server name="QUEUE_CONNECTION" value="sync"/>  
        <server name="SESSION_DRIVER" value="array"/>  
</php>  

この設定の後、
php artisan config:clear
をしてください。

ノリと勢いで投稿してみました。許してください。
そしてもしかして、ここそんなに躓くところではないのでしょうか?私は躓きました。
石がないところでも躓いていくスタイルです。

ちなみに、この設定をしたら次はaccess deniedで怒られました。
道のりは長かったですが無事にテストできました。

こちらを参考にさせて頂きました。ララジャパン

技術ブログをはじめよう Qrunch(クランチ)は、プログラマの技術アプトプットに特化したブログサービスです
駆け出しエンジニアからエキスパートまで全ての方々のアウトプットを歓迎しております!
or 外部アカウントで 登録 / ログイン する
クランチについてもっと詳しく

この記事が掲載されているブログ

@5ST6U41ywQgFNKmnの技術ブログ

よく一緒に読まれる記事

0件のコメント

ブログ開設 or ログイン してコメントを送ってみよう