1

基于此处的教程: 如何使用表单事件动态生成表单

我创建了一个使用事件订阅者的表单:

class PageType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder->add('name', 'text');

        $blockSubscriber = new AddBlocksSubscriber($builder->getFormFactory());
        $builder->addEventSubscriber($blockSubscriber);
    }

    // ...
}

到目前为止一切顺利......直到我决定编写一些单元测试。;) 'new' 关键字的使用是有问题的,因为它阻止我使用模拟订阅者对象。

我可以想到两种可能的解决方案:

  1. 使用测试助手/类构成,如下所述:虽然看起来有点麻烦,需要 PHP 扩展这样做并不“感觉”正确,但可能是一种实际的解决方法。

  2. 使用依赖注入,例如使 PageType 表单构造函数需要一个块订阅者的实例。我在这里发现的问题是,要在表单之外创建订阅者对象,我还需要表单构建器的实例。由于表单通常是通过调用createForm()控制器来构建的,因此我通常不会从表单外部看到构建器。

或者,是否真的需要对表单进行单元测试,或者使用爬虫对最终输出进行功能测试是否足够?

对于任何实现了一些 Symfony2 表单的人,我很想知道您是如何处理它的。

4

1 回答 1

2

Symfony2 食谱现在包含专门用于表单单元测试的章节: http: //symfony.com/doc/master/cookbook/form/unit_testing.html

于 2013-04-16T05:24:09.493 回答