使用事件订阅者对Symfony 2表单进行单元测试

时间:2013-01-08 09:52:36

标签: php phpunit symfony-2.1

基于此处的教程: 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'关键字是有问题的,因为它阻止我使用模拟订阅者对象。

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

  1. 使用测试帮助者/类冒充,如here所述: 虽然看起来有点麻烦,但需要PHP扩展。它并不“感觉”必须这样做,但可能是一个实际的解决方法。

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

  3. 或者,是否真的有必要对单元测试表单进行单元测试,还是使用履带程序对最终输出进行功能测试?

    对于那些实施了一些Symfony2表单的人,我很想知道你是如何找到它的。

1 个答案:

答案 0 :(得分:2)

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