LoginSignup
4
2

More than 1 year has passed since last update.

Laravel8 docker テスト用データベース作成

Last updated at Posted at 2021-08-13

今回はテストコード実行用のデータベース作成方法についてご紹介します!
データベースを使ったテストコードを実行する際、本番環境で使用しているデータベースでテストしてしまうと中身のデータが消えてしまい大変なことになりかねません。
(ポートフォリオ作成で何度も消しました、笑)
テストコードを実行する際は必ずテスト用のデータベースを作成しましょう!

.env.testingの作成

まずは.env.testingファイルを作成します。
ファイルの中身は.env.exampleファイルをコピペしましょう。
そして、test環境の設定をするため下記の点を書き換えます。

env.testing
APP_ENV=local
↓
APP_ENV=test

APP_KEY= //空にしておく

//接続したいテスト用DBの情報を記述
DB_CONNECTION=mysql
DB_HOST=db
DB_PORT=3306
DB_DATABASE=test_db
DB_USERNAME=root
DB_PASSWORD=?????

あとはキャッシュの削除をしないと反映されなかったりするので下記コマンドを実行しましょう。

php artisan config:cache

テスト用データベースの作成

mysql -u root //ログイン

create database test_db名; //データベース作成

exit

phpunit.xmlの設定変更

次にphpunit.xmlを開き、APP_ENVの値をtestingに変更します。

phpunit.xml
<php>
    <env name="APP_ENV" value="testing" force="true"/>
    <env name="DB_CONNECTION" value="mysql"/>
    <env name="BCRYPT_ROUNDS" value="4"/>
    <env name="CACHE_DRIVER" value="array"/>
    <env name="MAIL_DRIVER" value="array"/>
    <env name="QUEUE_CONNECTION" value="sync"/>
    <env name="SESSION_DRIVER" value="array"/>
</php>

アプリケーションキーの設定

最後にコマンドを実行して.env.testingに新規でアプリケーションキーを設定します。
※これをしないと.envのAPP_KEYを参照してしまい、本番用のDBのデータが全部消えるので注意してください!

php artisan key:generate --env=testing

注意点

docker-compose.ymlなどで環境変数にAPP_ENVDB_DATABASEなどの設定をしている場合、注意しなくてはいけない箇所があります。
phpunit.xmlで環境変数を上書きする際に、デフォルトだと<server>タグになっていますが、これを<env>タグに変更する必要があります。

<php>
    <server name="APP_ENV" value="testing" force="true"/>
    ・・・
        ↓ //<env>タグに変更
    <env name="APP_ENV" value="testing" force="true"/>
    ・・・
</php>

タグの違い

$_SERVER['APP_ENV'] = 'testing'; //<server>タグの場合
$_ENV['APP_ENV'] = 'testing'; //<env>タグの場合

テスト用データベースに本番データベースを反映

最後に本番データベース環境のmigration情報をテスト用データベースに反映させます。
こうすることで本番環境で使用しているデータベースの内容をテスト用データベースでも使用できます。
わざわざ本番環境と同じテーブルやカラムを手動で作成する必要がないので非常に楽です!

php artisan migrate --env=testing

完了したら実際に反映されているか確認しましょう。

参考サイト

4
2
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
4
2