jefferson-lima/fixture-factory

1.0.0 2020-06-24 22:32 UTC

This package is auto-updated.

Last update: 2024-09-29 05:36:22 UTC


README

生成用于测试的固定对象。

安装

composer require jefferson-lima/fixture-factory

使用

Fixture Factory 使用类属性的元数据来生成它们的值。为属性生成的值是从其 @var 标签派生的。因此,您必须首先使用它们的类型注解属性

MyClass {

  /** @var string */
  public $foo;

  public $bar;
}

没有 @var 标签或包含无效标签的属性将被忽略。

然后,您可以使用 FixtureFactory 为您的类创建一个固定对象

$myFixture = FixtureFactory::createFixture(MyClass::class);

Fixture Factory 使用 Faker 生成值。

支持的类型

目前支持的类型有 stringintboolfloat。如果提供了具体类,则支持对象。抽象类或接口不受支持,因为无法确定应使用哪个具体实现。嵌套对象将递归生成。

覆盖属性

可以通过将数组作为 createFixture 方法的第二个参数传递来覆盖属性

$myFixture = FixtureFactory::createFixture(MyClass::class, ['foo' => 'bar']);

循环引用

必须注意循环引用,必须避免或覆盖它们,否则将抛出异常。以下是一个循环引用的示例

class Foo {
  /** @var Bar */
  private $bar;
}

class Bar {
  /** @var Foo */
  private $foo;
}

可以通过覆盖一个属性来中断循环引用

$myFixture = FixtureFactory::createFixture(MyClass::class, ['bar' => null]);

Doctrine 注解也可以用于解决循环引用,例如

class Foo {
  /**
   * @var Bar
   * @OneToOne(targetEntity="Bar", inversedBy="foo")
   */
  private $bar;
}

class Bar {
  /**
   * @var Foo
   * @OneToOne(targetEntity="Foo", mappedBy="bar")
   */
  private $foo;
}

在这种情况下,可以确定 foo 指向 bar,而 bar 又指向它。

Symfony 约束

还可以使用 Symfony 验证约束 来缩小为您的属性生成的值。以下是目前按优先级顺序列出的受支持的约束

字符串

某些约束不能同时应用。在这种情况下,应用优先级较高的约束。例如

/**
 * @Length(min=255)
 * @Email
 */
private $email;

在这种情况下,应用了 @Email 约束,而 @Length 将被忽略。

Doctrine 关联

以下 Doctrine 关联受支持

对于关联的多侧,创建一个包含两个元素的 ArrayCollection。

许可证

本项目采用 MIT 许可证 - 请参阅 LICENSE.md 文件以获取详细信息