如何以Symfony形式对实体断言进行单元测试?

时间:2019-02-22 10:58:09

标签: symfony symfony-forms symfony4

在Symfony 4.2中,我拥有带有assert的实体:

...
/**
 * @var string
 *
 * @Assert\NotBlank()
 * @Assert\Email()
 */
private $email;
...

我有此实体的表格:

$builder
    ...
    ->add('email', null, [
        'label' => 'label.email',
        'help' => 'email.help_privacy',
    ])
    ...

我想测试这张表格。我读了文档:How to Unit Test your Forms

但是当我要测试此表单时,但是我不知道如何测试断言当我有一个Notblank()断言时,电子邮件尚未完成。

public function testSubmitValidData(): void
{
    $formData = [
        'name' => 'Sheriff Woody',
        'message' => 'Hello Sheriff Woody',
    ];

    $objectToCompare = new Contact();

    $form = $this->factory->create(ContactType::class, $objectToCompare);

    $object = new Contact();
    $object->setName('Sheriff Woody');
    $object->setMessage('Hello Sheriff Woody');

    $form->submit($formData);

    $this->assertTrue($form->isSynchronized());

    $this->assertEquals(
        $object,
        $objectToCompare
    );

    $view = $form->createView();
    $children = $view->children;

    foreach (array_keys($formData) as $key) {
        $this->assertArrayHasKey(
            $key,
            $children
        );
    }
}

但是我不知道如何测试我的实体的断言。你能帮我吗?

1 个答案:

答案 0 :(得分:1)

免责声明:我通常使用功能测试来测试表单,而不是单元测试。

assert部分不是真正的形式,它是验证。您可以单独测试它(选择TU而不是TF)。

您的问题已在documentation中记录

  

注意:不要测试验证:它是由监听器应用的   在测试用例中处于非活动状态,它依赖于验证配置。   而是直接对您的自定义约束进行单元测试。

就个人而言,我真的看不到对中小型项目的表单进行单元测试的意义,因为我们可以安全地假设Symfony的表单工厂运行良好。