今回はテストコード実行用のデータベース作成方法についてご紹介します!
データベースを使ったテストコードを実行する際、本番環境で使用しているデータベースでテストしてしまうと中身のデータが消えてしまい大変なことになりかねません。
(ポートフォリオ作成で何度も消しました、笑)
テストコードを実行する際は必ずテスト用のデータベースを作成しましょう!
##.env.testingの作成
まずは.env.testing
ファイルを作成します。
ファイルの中身は.env.example
ファイルをコピペしましょう。
そして、test環境の設定をするため下記の点を書き換えます。
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に変更します。
<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_ENV
やDB_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
完了したら実際に反映されているか確認しましょう。
##参考サイト