Posted at

Laravel でテスト〜準備編


この記事について

Laravel でプロジェクト始めるとき、あるいはテストを書き始める前にいじる、テスト関連の設定項目について列挙します。

必須ではないですが、データベースは開発用と別にするのがいいと思っていまして(何かで整合性が取れなくなったときに気軽につくり直せるように)、その場合はいくつかのファイルを変更する必要があるので、そこら辺について。

データベースを開発と共用する場合はなにも変更せずともすぐにテストを実行できるので、この記事に書かれていることは不要です。


はじめに


環境


  • MySQL: 5.7.20

  • Laravel: 5.5.44

  • PHPUnit: 6.5.8


詳細

データベース名、ユーザー名、などは適宜差し替えてください。

テスト用DBを作成して、適宜パーミッションやらなんやら設定しておきましょう。

create database homestead_testing default charset utf8mb4 collate utf8mb4_unicode_ci;

grant all on homestead_testing.* to 'homestead'@'localhost';

config/database.php に以下の配列を追加します。


config/database.php

        'mysql_testing' => [

'driver' => 'mysql',
'host' => env('DB_TESTING_HOST', '127.0.0.1'),
'port' => env('DB_TESTING_PORT', '3306'),
'database' => env('DB_TESTING_DATABASE', 'forge'),
'username' => env('DB_TESTING_USERNAME', 'forge'),
'password' => env('DB_TESTING_PASSWORD', ''),
'unix_socket' => env('DB_TESTING_SOCKET', ''),
'charset' => 'utf8mb4',
'collation' => 'utf8mb4_unicode_ci',
'prefix' => '',
'strict' => true,
'engine' => null,
],

続いて .env (.env.testing でも可)に以下の行を追加

DB_TESTING_HOST=127.0.0.1

DB_TESTING_PORT=3306
DB_TESTING_DATABASE=homestead_testing
DB_TESTING_USERNAME=homestead
DB_TESTING_PASSWORD=secret

最後、phpunit.xml


phpunit.xml

diff --git a/phpunit.xml b/phpunit.xml

index bb9c4a7..c41b5dd 100644
--- a/phpunit.xml
+++ b/phpunit.xml
@@ -24,6 +24,7 @@
</filter>
<php>
<env name="APP_ENV" value="testing"/>
+ <env name="DB_CONNECTION" value="mysql_testing"/>
<env name="CACHE_DRIVER" value="array"/>


おわりに

テストの際にこんな設定もしてるよ、というのがあれば、データベース関連に限らずコメント欄にて教えていただけると助かります :bow: