6

我正在尝试测试我创建的使用具有类实体的字段的表单类型

这是表单的创建

$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);

关于如何修复此错误以使用实体测试我的自定义表单类型的任何想法?

提前致谢

4

3 回答 3

3

我猜你不能对实体类型的表单进行单元测试,因为它被定义为服务。您是否尝试过手动添加

编辑:恕我直言,您应该模拟实体类型,因为它涉及教义,这取决于现有的数据库连接等,加载的完整内核。因此,您不再进行单元测试。这将是一个功能测试。也许这就是为什么它在单元测试中不可用的原因。

于 2013-05-02T21:19:47.193 回答
2

根据添加您的表单所依赖的类型下的 symfony 文档

要正确创建表单,您需要在测试中使该类型对表单工厂可用。最简单的方法是在使用 PreloadedExtension 类创建父表单之前手动注册它:

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
    }
}
于 2015-06-23T19:02:02.240 回答
0

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

$type = new MyType();
$form = $this->factory->create($type, null);
于 2015-06-16T14:17:21.347 回答