基于此处的教程: 如何使用表单事件动态生成表单
我创建了一个使用事件订阅者的表单:
class PageType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('name', 'text');
$blockSubscriber = new AddBlocksSubscriber($builder->getFormFactory());
$builder->addEventSubscriber($blockSubscriber);
}
// ...
}
到目前为止一切顺利......直到我决定编写一些单元测试。;) 'new' 关键字的使用是有问题的,因为它阻止我使用模拟订阅者对象。
我可以想到两种可能的解决方案:
使用测试助手/类构成,如下所述:虽然看起来有点麻烦,需要 PHP 扩展。这样做并不“感觉”正确,但可能是一种实际的解决方法。
使用依赖注入,例如使 PageType 表单构造函数需要一个块订阅者的实例。我在这里发现的问题是,要在表单之外创建订阅者对象,我还需要表单构建器的实例。由于表单通常是通过调用
createForm()
控制器来构建的,因此我通常不会从表单外部看到构建器。
或者,是否真的需要对表单进行单元测试,或者使用爬虫对最终输出进行功能测试是否足够?
对于任何实现了一些 Symfony2 表单的人,我很想知道您是如何处理它的。