14
FebDawid Janik comes up with a package called Laravel Factory Generator. This package will generate factories from your existing models. That way you can get started with testing your Laravel or Lumen application more quickly! It is a forked version of mpociot/laravel-test-factory-helper package.
You can install the package via composer:
composer require thedoctor0/laravel-factory-generator --dev
For Lumen, it is also required to register FactoryGeneratorServiceProvider
.
To generate multiple factories at once, run the artisan command:
php artisan generate:factory
This command will find all models within your application and create test factories.
To generate a factory for only a specific model or models, run the artisan command:
php artisan generate:factory User Company
By default, generation will not overwrite any existing model factories.
You can force overwriting existing model factories by using the –force
option:
php artisan generate:factory --force
By default, it will search recursively for models under the app/Models
(Laravel/Lumen
8.x) or app for (Laravel/Lumen
6.x and 7.x).
If your models are within a different folder, you can specify this using the –dir
option.
In this case, run the artisan command:
php artisan generate:factory --dir app/Models
If your models are within a different namespace, you can specify it using –namespace
option.
You just need to execute this artisan
command:
php artisan generate:factory --dir vendor/package/src/Models --namespace CustomNamespace\\Models
By default, your model directory structure is not taken into account, even though it has subdirectories.
You can reflect it to the database/factories
directory by using the –recursive
option:
php artisan generate:factory --recursive
Example
Migration and Model
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);
}
}
For Laravel/Lumen 8.x and up:
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' => $this->faker->name,
'username' => $this->faker->userName,
'email' => $this->faker->safeEmail,
'password' => bcrypt($this->faker->password),
'company_id' => \App\Company::factory(),
'remember_token' => Str::random(10),
];
}
}
For more details, you can visit its complete documentation with code examples on github.
Published at : 14-02-2022
I am a highly results-driven professional with 12+ years of collective experience in the grounds of web application development especially in laravel, native android application development in java, and desktop application development in the dot net framework. Now managing a team of expert developers at Codebrisk.
Launch project