4
2

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.

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?