This package helps you to manage faked models. Make, create and store in database. This factory is another way to work with fixtures and inspired by factories in laravel.
composer require dmirogin/fakemodel
Add component to your application configuration
'factory' => [
'class' => \dmirogin\fakemodel\ModelFactory::class,
'resolvers' => [
[
'class' => \dmirogin\fakemodel\resolvers\FakerResolver::class,
'definitions' => [
\app\models\MyModel::class => function (\Faker\Generator $faker) {
return [
'id' => $faker->numberBetween(1, 100),
'username' => $faker->userName,
'password' => $faker->password
];
}
]
]
]
],
Now you can do:
Yii::$app->factory->setModel(\app\models\MyModel::class)->make();
In your base TestCase class you can create simple function:
/**
* Create model factory
*
* @param string $model
* @param int $amount
* @return \dmirogin\fakemodel\ModelFactory
*/
protected function factory(string $model, int $amount = 1): \dmirogin\fakemodel\ModelFactory
{
/** @var \dmirogin\fakemodel\ModelFactory $factory */
$factory = Yii::$app->factory;
return $factory->setModel($model)->setAmount($amount);
}
and call just by:
$this->factory(\app\models\MyModel::class)->make();
'factory' => [
'class' => \dmirogin\fakemodel\ModelFactory::class,
'resolvers' => [
[
'class' => \dmirogin\fakemodel\resolvers\FakerResolver::class,
'definitions' => [
\app\models\MyModel::class => function (\Faker\Generator $faker) {
return [
'id' => $faker->numberBetween(1, 100),
'username' => $faker->userName,
'password' => $faker->password
];
}
]
],
[
'class' => \dmirogin\fakemodel\resolvers\StatesResolver::class,
'definitions' => [
\app\models\MyModel::class => [
'admin' => [
'id' => 1
]
]
]
]
]
],
Yii::$app->factory->setModel(\app\models\MyModel::class)->states(['admin'])->setAmount(5)->make();
See more in WIKI.
Comments