arnolem / magic-fixtures
简易设施生成器
2.2.0
2023-08-15 17:16 UTC
Requires
- php: ^8.2
- fakerphp/faker: 1.*
- psr/container: 2.*
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) 许可。