基于此处的教程: How to Dynamically Generate Forms Using Form Events
我创建了一个使用事件订阅者的表单:
class PageType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('name', 'text');
$blockSubscriber = new AddBlocksSubscriber($builder->getFormFactory());
$builder->addEventSubscriber($blockSubscriber);
}
// ...
}
到目前为止一直很好......直到我决定写一些单元测试。 ;)使用'new'关键字是有问题的,因为它阻止我使用模拟订阅者对象。
我可以想到两种可能的解决方案:
使用测试帮助者/类冒充,如here所述: 虽然看起来有点麻烦,但需要PHP扩展。它并不“感觉”必须这样做,但可能是一个实际的解决方法。
使用依赖注入,例如使PageType表单构造函数需要块订阅者的实例。
我在这里找到的问题是,要在表单之外创建一个订阅者对象,我还需要一个表单生成器的实例。由于表单通常是通过调用控制器中的createForm()
来构建的,因此我通常不会从表单外部看到构建器。
或者,是否真的有必要对单元测试表单进行单元测试,还是使用履带程序对最终输出进行功能测试?
对于那些实施了一些Symfony2表单的人,我很想知道你是如何找到它的。
答案 0 :(得分:2)
Symfony2食谱现在包含一章专门用于表格单元测试: http://symfony.com/doc/master/cookbook/form/unit_testing.html