localheinz/factory-muffin-definition

Provides an interface for, and an easy way to find and register entity definitions for league/factory-muffin.

1.1.0 2017-10-11 20:39 UTC

README

Build Status codecov Latest Stable Version Total Downloads

Inspired by localheinz/factory-girl-definition, this provides an interface for, and an easy way to find and register entity definitions for league/factory-muffin.

Installation

Run

$ composer require --dev localheinz/factory-muffin-definition

Usage

Create Definitions

Implement the Definition interface and use the instance of League\FactoryMuffin\FactoryMuffin that is passed in into accept() to define entities:

<?php

namespace Foo\Bar\Test\Fixture\Entity;

use Foo\Bar\Entity;
use League\FactoryMuffin\FactoryMuffin;
use Localheinz\FactoryMuffin\Definition\Definition;

final class UserDefinition implements Definition
{
    public function accept(FactoryMuffin $factoryMuffin)
    {
        $factoryMuffin->define(Entity\User::class)->setDefinitions([
            // ...
        ]);
    }
}

💡 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 League\FactoryMuffin\FactoryMuffin and use Definitions to find definitions and register them with the factory:

<?php

namespace Foo\Bar\Test\Integration;

use League\FactoryMuffin\FactoryMuffin;
use League\FactoryMuffin\Stores;
use Localheinz\FactoryMuffin\Definition\Definitions;
use PHPUnit\Framework;

abstract class AbstractIntegrationTestCase extends Framework\TestCase
{
    final protected function factoryMuffin(): FactoryMuffin
    {
        static $factoryMuffin = null;
        
        if (null === $factoryMuffin) {
            $factoryMuffin = new FactoryMuffin(new Stores\ModelStore('save'));
            
            Definitions::in(__DIR__ . '/../Fixture')->registerWith($factoryMuffin);
        }
        
        return $factoryMuffin;
    }
}

Contributing

Please have a look at CONTRIBUTING.md.

Code of Conduct

Please have a look at CODE_OF_CONDUCT.md.

License

This package is licensed using the MIT License.