Skip to content
This repository has been archived by the owner on Aug 29, 2020. It is now read-only.

👧 Provides an interface for, and an easy way to find and register entity definitions for breerly/factory-girl-php.

License

Notifications You must be signed in to change notification settings

ergebnis/factory-girl-definition

Repository files navigation

factory-girl-definition

Integrate Prune Release Renew

Code Coverage Type Coverage

Latest Stable Version Total Downloads

Provides an interface for, and an easy way to find and register entity definitions for breerly/factory-girl-php.

Installation

Run

$ composer require --dev ergebnis/factory-girl-definition

Usage

Create Definitions

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.

Register Definitions

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;
    }
}

Contributing

Please have a look at CONTRIBUTING.md.

Code of Conduct

Please have a look at CODE_OF_CONDUCT.md.

This package is licensed using the MIT License.

License

This package is licensed using the MIT License.

Please have a look at LICENSE.md.

Curious what I am building?

📬 Subscribe to my list, and I will occasionally send you an email to let you know what I am working on.

About

👧 Provides an interface for, and an easy way to find and register entity definitions for breerly/factory-girl-php.

Topics

Resources

License

Code of conduct

Security policy

Stars

Watchers

Forks

Sponsor this project

  •  
  •  

Packages

No packages published

Contributors 4

  •  
  •  
  •  
  •