arnolem/magic-fixtures

简易设施生成器

2.2.0 2023-08-15 17:16 UTC

This package is auto-updated.

Last update: 2024-09-18 14:57:01 UTC


README

Magic Fixtures 允许您快速轻松地创建设施,以简化开发和测试。

安装

需要 PHP 8.2+ 和 Composer

composer req --dev arnolem/magic-fixtures

主要功能

  • 设施是原生 PHP 类。
  • 设施会自动从目录中加载。
  • 设施与 Psr\Container\ContainerInterface 兼容,以便与所有框架集成。
  • 它使用 needs() 方法管理设施之间的依赖关系。
  • 创建的对象可以存储以在其他设施中使用。
  • 对象可以通过标识符、类、标签或随机方式检索。
  • 随机检索匹配标签的对象。
  • 集成 Faker 以生成假数据。

用法

安装

Symfony 的安装示例

namespace Tests\Account;

use Arnolem\MagicFixtures\MagicFixtures;
use Symfony\Bundle\FrameworkBundle\Test\KernelTestCase;

class AccountCase extends KernelTestCase
{

    /**
     * @throws DirectoryNotFoundException
     */
    public static function setUpBeforeClass(): void
    {
        // Boot Symfony Kernel
        self::bootKernel();

        // Provide Symfony Container to Magic Fixtures
        $magicFixtures = new MagicFixtures(self::getContainer());
        
        // Load all Fixtures form "/Tests/Fixtures/*"
        $magicFixtures->loadFromDirectory(__DIR__ . '/Fixture');
        
        // Executes Fixtures
        $magicFixtures->execute();
    }
    
    public function testTrue(): void
    {
        $this->assertTrue(true);
    }

}

您的第一个设施

namespace Tests\Fixture;

use App\Domain\Account;
use App\Domain\Company;
use App\Infrastructure\AccountPersister;
use Arnolem\MagicFixtures\Fixture;

readonly class AccountFixture extends Fixture
{

    public function __construct()
    {
        $this->accountPersister = $this->getService(AccountPersister::class);
    }

    public function execute(): void
    {
        $account = new Account(
            firstname: 'Arnaud',
            name: 'Lemercier',
            company: $this->getRandomReference(Company::class);
        );
        
        $this->accountPersister->save($account);
    }

    public function needs(): array
    {
        return [
            Company::class
        ];
    }
}

另一个依赖于设施的设施

namespace Tests\Fixture;

use App\Domain\Company;
use App\Infrastructure\CompanyPersister;
use Arnolem\MagicFixtures\Fixture;

readonly class CompanyFixture extends Fixture
{

    public function __construct()
    {
        $this->companyPersister = $this->getService(CompanyPersister::class);
    }

    public function execute(): void
    {
    
        // Create a default and activated company
        $company = new Company(
            id: 0
            name: 'Wixiweb',
            isActivate: true,
        );
        
        $this->companyPersister->save($company);
        $this->addReference($company, $company->getId(), ['activate', 'default']);
            
        // Create others 10 inactivates companies
        for ($idCompany = 1; $idCompany <= 10; $idCompany++) {
        
            $company = new Company(
                id: $idCompany
                name: $this->faker->company(),
                isActivate: false,
            );
            
            $this->companyPersister->save($company);
            $this->addReference($company, $company->getId();
        }
        
    }
}

鸣谢

  • Arnaud Lemercier 基于 Wixiweb

许可

Magic Fixtures 根据 MIT 许可证 (MIT) 许可。