note
test用のDBを作成する
CREATE DATABASE `xxx_testing`;
test用DBの接続設定
phpunit.xml+.env.testing
RefreshDatabaseトレイトでマイグレーションを実行テスト用のレコードを作成
Factory+FakerFactory: 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();
// テストを書く
}