Provides an interface for, and an easy way to find and register entity definitions for breerly/factory-girl-php
.
Run
$ composer require --dev ergebnis/factory-girl-definition
Implement one of the
Ergebnis\FactoryGirl\Definition\Definition
Ergebnis\FactoryGirl\Definition\FakerAwareDefinition
interfaces and use the instance of FactoryGirl\Provider\Doctrine\FixtureFactory
that is passed into accept()
to define entities:
<?php
namespace Foo\Bar\Test\Fixture\Entity;
use Ergebnis\FactoryGirl\Definition\Definition;
use FactoryGirl\Provider\Doctrine\FixtureFactory;
use Foo\Bar\Entity;
final class UserDefinition implements Definition
{
public function accept(FixtureFactory $fixtureFactory): void
{
$fixtureFactory->defineEntity(Entity\User::class, [
// ...
]);
}
}
💡 Any number of entities can be defined within a definition. However, it's probably a good idea to create a definition for each entity.
Lazily instantiate an instance of FactoryGirl\Provider\Doctrine\FixtureFactory
and use Definitions
to find definitions, register definitions with the
fixture factory, and optionally provide definitions with an instance of
Faker\Generator
:
<?php
namespace Foo\Bar\Test\Integration;
use Doctrine\ORM;
use Ergebnis\FactoryGirl\Definition\Definitions;
use FactoryGirl\Provider\Doctrine\FixtureFactory;
use Faker\Generator;
use PHPUnit\Framework;
abstract class AbstractIntegrationTestCase extends Framework\TestCase
{
/**
* @var FixtureFactory
*/
private $fixtureFactory;
final protected function entityManager(): ORM\EntityManager
{
// ...
}
final protected function faker(): Generator
{
// ...
}
final protected function fixtureFactory(): FixtureFactory
{
if (null === $this->fixtureFactory) {
$fixtureFactory = new FixtureFactory($this->entityManager());
$fixtureFactory->persistOnGet(true);
Definitions::in(__DIR__ . '/../Fixture')
->registerWith($fixtureFactory)
->provideWith($this->faker());
$this->fixtureFactory = $fixtureFactory;
}
return $this->fixtureFactory;
}
}
Please have a look at CONTRIBUTING.md
.
Please have a look at CODE_OF_CONDUCT.md
.
This package is licensed using the MIT License.
This package is licensed using the MIT License.
Please have a look at LICENSE.md
.
📬 Subscribe to my list, and I will occasionally send you an email to let you know what I am working on.