如何以 Symfony 形式对实体断言进行单元测试?
How to unit test entity assert in Symfony form?
使用 Symfony 4.2,我有带有断言的实体:
...
/**
* @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() assert.
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
);
}
}
但我不知道如何测试我的实体的断言。你能帮帮我吗?
免责声明:我通常使用功能测试而不是单元测试来测试我的表单。
断言部分不是真正的形式,它是验证。您可以单独测试它(因为您选择 TU 而不是 TF)。
您的问题已记录在 中 documentation:
NOTE Don't test the validation: it is applied by a listener that is
not active in the test case and it relies on validation configuration.
Instead, unit test your custom constraints directly.
就我个人而言,我真的不明白对 small/medium 项目的表单进行单元测试的意义,因为我们可以放心地假设 Symfony 的表单工厂运行良好。
使用 Symfony 4.2,我有带有断言的实体:
...
/**
* @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() assert.
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
);
}
}
但我不知道如何测试我的实体的断言。你能帮帮我吗?
免责声明:我通常使用功能测试而不是单元测试来测试我的表单。
断言部分不是真正的形式,它是验证。您可以单独测试它(因为您选择 TU 而不是 TF)。
您的问题已记录在 中 documentation:
NOTE Don't test the validation: it is applied by a listener that is not active in the test case and it relies on validation configuration. Instead, unit test your custom constraints directly.
就我个人而言,我真的不明白对 small/medium 项目的表单进行单元测试的意义,因为我们可以放心地假设 Symfony 的表单工厂运行良好。