在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
);
}
}
但是我不知道如何测试我的实体的断言。你能帮我吗?
答案 0 :(得分:1)
免责声明:我通常使用功能测试来测试表单,而不是单元测试。
assert部分不是真正的形式,它是验证。您可以单独测试它(选择TU而不是TF)。
您的问题已在documentation中记录:
注意:不要测试验证:它是由监听器应用的 在测试用例中处于非活动状态,它依赖于验证配置。 而是直接对您的自定义约束进行单元测试。
就个人而言,我真的看不到对中小型项目的表单进行单元测试的意义,因为我们可以安全地假设Symfony的表单工厂运行良好。