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.
- PHP 7.1 +
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.