thedoctor0/laravel-factory-generator

自动为您的模型生成Laravel工厂。

1.4.3 2024-05-14 06:51 UTC

README

Packagist Packagist License

Banner

从现有的模型自动生成 工厂

这将使您能够更快地编写包含模型的测试。

安装

您可以通过composer安装此包

composer require thedoctor0/laravel-factory-generator --dev

对于Laravel 8.x和9.x,请检查 v1.3.2

对于Laravel 6.x和7.x,请检查 v1.2.5

用法

要一次性生成所有工厂,只需运行此Artisan命令

php artisan generate:factory

它将找到所有模型,并根据数据库结构和模型关系生成测试工厂。

示例

迁移和模型

Schema::create('users', function (Blueprint $table) {
    $table->increments('id');
    $table->string('name');
    $table->string('username');
    $table->string('email')->unique();
    $table->string('password', 60);
    $table->integer('company_id');
    $table->rememberToken();
    $table->timestamps();
});

class User extends Model {
    public function company()
    {
        return $this->belongsTo(Company::class);
    }
}

生成的工厂

<?php

declare(strict_types=1);

namespace Database\Factories;

use App\Models\Contact;
use Illuminate\Database\Eloquent\Factories\Factory;

/**
 * @extends Factory<\App\Models\User>
 */
final class UserFactory extends Factory
{
    /**
     * The name of the factory's corresponding model.
     *
     * @var string
     */
    protected $model = User::class;

    /**
     * Define the model's default state.
     *
     * @return array
     */
    public function definition(): array
    {
        return [
            'name' => faker()->name,
            'username' => faker()->userName,
            'email' => faker()->safeEmail,
            'password' => bcrypt(faker()->password),
            'company_id' => \App\Company::factory(),
            'remember_token' => Str::random(10),
        ];
    }
}

高级用法

选择模型

要为特定模型或模型生成工厂,请运行Artisan命令

php artisan generate:factory User Company

覆盖现有工厂

默认情况下,生成不会覆盖任何现有的模型工厂。

您可以使用force选项强制覆盖现有的模型工厂

php artisan generate:factory --force

自定义输出目录

默认情况下,它将在app/Models目录下递归地搜索模型。

如果您的模型位于不同的文件夹中,您可以使用--dir选项指定。

在这种情况下,运行Artisan命令

php artisan generate:factory --dir app/Models

自定义命名空间

如果您的模型位于不同的命名空间中,您可以使用--namespace选项指定。

只需执行此Artisan命令

php artisan generate:factory --dir vendor/package/src/Models --namespace CustomNamespace\\Models

使用递归模式

默认情况下,您的模型目录结构不考虑,即使有子目录。

您可以使用--recursive选项将其反映到database/factories目录

php artisan generate:factory --recursive

自定义工厂模板

如果您需要,可以自定义工厂模板以满足您的需求。

要发布工厂模板到resources/views/vendor/factory-generator/factory.blade.php,请运行Artisan命令

php artisan vendor:publish --tag="factory-generator"

许可证

MIT许可证(MIT)。有关更多信息,请参阅许可证文件