Php 如何使用eventlisteners对Symfony2表单中的表单字段进行单元测试

Php 如何使用eventlisteners对Symfony2表单中的表单字段进行单元测试,php,forms,unit-testing,symfony,symfony-2.4,Php,Forms,Unit Testing,Symfony,Symfony 2.4,这在Symfony2.4上: 我试图测试(在单元测试中)表单中某些字段的存在,这些字段应该由事件侦听器动态添加。根据传递给表单的数据,某些字段应存在,其他字段不在一种情况下,而在另一种情况下应使用不同的组合 表单本身是正确的,它确实(似乎)按预期工作 我的表单类“MyFormType::buildForm()方法大致如下: public function buildForm(FormBuilderInterface $builder, array $options) { $builder

这在Symfony2.4上:

我试图测试(在单元测试中)表单中某些字段的存在,这些字段应该由事件侦听器动态添加。根据传递给表单的数据,某些字段应存在,其他字段不在一种情况下,而在另一种情况下应使用不同的组合

表单本身是正确的,它确实(似乎)按预期工作

我的表单类“
MyFormType::buildForm()
方法大致如下:

public function buildForm(FormBuilderInterface $builder, array $options)
{
    $builder->add('name', null, array(
        'label' => 'name'
    ));

    $builder->addEventListener(FormEvents::PRE_SET_DATA, function (FormEvent $event)

        $form = $event->getForm();
        $data = $event->getData();

        if ($data->getSomeField() === 123) {
            $form->add('field1');
        } else {
            $form->add('field2');
        }            
    });     
}
在单元测试中,我得到一个表单并设置了一些数据(将数据传递给
create()
方法没有任何区别):

在这之后,我尝试转储
$this->form->all()
,查看动态添加的字段是否存在,但它们不存在

$this->assertTrue($this->form->has('field1')也会失败


有什么想法我错过了,或者应该采取不同的措施来实现一个完全初始化的表单(执行所有相关的事件监听器,并显示所有字段,动态添加或不添加)?

这不是单元测试的目的,因为单元测试是为了孤立地测试一个类,它有多个交互模块,一些在前端,一些在后端。这更像是一个集成测试或功能测试项目,可能涉及Selenium。是的,你说得对。严格来说,这不是单元测试。但我还是想要这个。我已经在许多其他表单中使用了它,我的问题是那些依赖事件侦听器来操作表单字段的表单。
$this->form = $this->getService('form.factory')->create(new MyFormType(), null, array('csrf_protection' => false));
$this->form->setData($data);