Forms Symfony2自定义表单类型正在使用实体尝试对其进行测试

Forms Symfony2自定义表单类型正在使用实体尝试对其进行测试,forms,unit-testing,symfony,entity,custom-type,Forms,Unit Testing,Symfony,Entity,Custom Type,我正在尝试测试我创建的一个表单类型,它使用带有类实体的字段 下面是表单的创建 $builder ->add('name', 'text') ->add('description', 'textarea') ->add('services', 'entity', array('class' => 'MyBundle:Service', 'group_by' => 'category.name',

我正在尝试测试我创建的一个表单类型,它使用带有类实体的字段

下面是表单的创建

$builder
            ->add('name', 'text')
            ->add('description', 'textarea')
            ->add('services', 'entity', array('class' => 'MyBundle:Service', 'group_by' => 'category.name', 'property' => 'name', 'multiple' => true, 'required' => false));
当我构建表单时,这种方法非常有效,但是我正在尝试对这种类型进行单元测试

下面介绍如何测试自定义表单类型

我得到了这个错误

Symfony\Component\Form\Exception\Exception:无法加载类型“实体”

此错误是在单元测试开始时在以下命令下产生的:

    $type = new MyType();
    $form = $this->factory->create($type);
关于如何修复此错误以便使用实体测试自定义表单类型,您有什么想法吗


提前感谢

我想您不能用实体类型对表单进行单元测试,因为它被定义为服务。你试过了吗


EDIT:IMHO您应该模拟实体类型,因为它涉及到原则,这取决于现有的数据库连接以及加载的完整内核。所以你不再进行单元测试了。这将是一个功能测试。也许这就是为什么它在单元测试中不可用的原因。

在方法create中为第二个参数添加null

$type = new MyType();
$form = $this->factory->create($type, null);

根据symfony文件中的

要正确创建表单,需要将该类型提供给 测试中的表单工厂。最简单的方法是注册它 在使用PreloadeExtension创建父窗体之前手动 类别:


根据我的理解,当一个表单类型依赖于另一个表单类型时,就会使用这个方法,因为在我看来,它是一个传递给choice实体的实体。我已经设法测试了简单的表单类型,但没有测试使用实体类型的表单类型:(目前,Symfony支持EntityType开箱即用,但没有合适的方法对其进行单元测试:。
class TestedTypeTest extends TypeTestCase
{
    protected function getExtensions()
    {
        $childType = new TestChildType();
        return array(new PreloadedExtension(array(
            $childType->getName() => $childType,
        ), array()));
    }

    public function testSubmitValidData()
    {
        $type = new TestedType();
        $form = $this->factory->create($type);

        // ... your test
    }
}