0
0

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.

laravel テスト用DB接続設定

Last updated at Posted at 2022-02-16

はじめに

Illuminate\Database\Eloquent\Modelを利用している場合には、
リレーション (belongsTo``hasOne``hasManyなど)の対応がシンプルにできるため、
テスト用DBにてphpunitを実施する設定について記載しています

環境

laravel: v5.5.50
phpunit/phpunit: 5.7.27

テスト用DBの接続設定

config/database.php
//...

    'connections' => [  
       // ...

       // テスト用設定
       'test' => [
            'driver'      => 'mysql',
            'host'        => env('DB_HOST', '127.0.0.1'),
            'port'        => env('DB_PORT', '3306'),
            'database'    => 'test',
            'username'    => env('DB_USERNAME', 'forge'),
            'password'    => env('DB_PASSWORD', ''),
            'unix_socket' => env('DB_SOCKET', ''),
            'charset'     => 'utf8mb4',
            'collation'   => 'utf8mb4_unicode_ci',
            'prefix'      => '',
            'strict'      => false,
            'engine'      => null,
        ],
    ],

    // ...

※接続設定は環境に応じて適宜書き換えてください

DB_CONNECTION設定

以下phpunit.xmlを書き換え

phpunit.xml
<phpunit backupGlobals="false"
         backupStaticAttributes="false"
         bootstrap="bootstrap/autoload.php"
         colors="true"
         convertErrorsToExceptions="true"
         convertNoticesToExceptions="true"
         convertWarningsToExceptions="true"
         processIsolation="false"
         stopOnFailure="false">
    // ...

    <php>
        // ...

        <env name="DB_CONNECTION" value="test" force="true"/>
    </php>
</phpunit>

DB_CONNECTIONが適用されない場合

configをキャッシュしていると、phpunit.xmlの設定が適用されないようです

bootstrap/cache/config.phpを削除することで適用されました

rm -f bootstrap/cache/config.php

RefreshDatabase設定

traitのRefreshDatabaseを利用すると、
テスト実行時にphp arsitan migrate:refreshを実行してくれます

tests/ExampleTest.php
<?php

namespace Tests;

use Illuminate\Foundation\Testing\RefreshDatabase;
use Illuminate\Foundation\Testing\TestCase as BaseTestCase;

class ExampleTest extends BaseTestCase
{
    use RefreshDatabase;

    // ... テストコード
}

ハマった内容

Illuminate\Console\Commandを継承したクラスの__constructで、
DBの参照しているとBase table or view not foundが発生しました

さいごに

phpunit.xmlAPP_ENVを変更する設定もあるようですが、
複数の環境にてテストを実施する場合にはそちらを利用したほうがよさそうです
※設定することがあればそちらについても投稿します

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?