note
test用のDBを作成する
CREATE DATABASE `xxx_testing`;
test用DBの接続設定
phpunit.xml
+.env.testing
RefreshDatabase
トレイトでマイグレーションを実行テスト用のレコードを作成
Factory
+Faker
Factory
: DBにデータを挿入する機能Faker
: ランダムなダミー値を生成する機能
- (
Factory
はphp artisan make:factory XxxxFactory --model=Xxxx
で作成)
テスト実行前に config:clear Artisanコマンドで設定キャッシュをクリアする
サンプル
// phpunit.xml <php> <server name="APP_ENV" value="testing"/> <server name="BCRYPT_ROUNDS" value="4"/> <server name="CACHE_DRIVER" value="array"/> <server name="MAIL_DRIVER" value="array"/> <server name="QUEUE_CONNECTION" value="sync"/> <server name="SESSION_DRIVER" value="array"/> </php>
// .env.testing // PHPUnit や Artisan コマンド を --env=testing オプション付きで実行時に `.envファイル` の内容をオーバーライドする DB_CONNECTION=xxx DB_HOST=xxx DB_PORT=xxx DB_DATABASE=xxx_testing DB_USERNAME=xxx DB_PASSWORD=xxx
// Factory // `databases/factories/UserFactory.php` (プロジェクト作成時に自動で生成されるサンプル) $factory->define(User::class, function (Faker $faker) { return [ 'name' => $faker->name, //Faker でランダムなダミー値を設定 'email' => $faker->unique()->safeEmail, 'email_verified_at' => now(), 'password' => '$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi', // password 'remember_token' => Str::random(10), ]; });
// UnitTest final class XxxxTest extends TestCase { // テスト実行時に自動的にマイグレーションを実行 + テスト中に変更したレコードを元に戻す use RefreshDatabase; public function setUp(): void { parent::setUp(); // テスト実行前に config:clear Artisan コマンドで設定キャッシュをクリア Artisan::call('config:clear'); } public function testXXX() { // テスト用のデータを 1 件生成 // UserFactory.php で設定した Faker でランダムなダミー値のデータが生成される factory(User::class)->create(); // テストを書く }