【问题标题】:Symfony2 Custom form type using entity trying to test itSymfony2 使用实体尝试测试它的自定义表单类型
【发布时间】:2023-03-12 01:15:02
【问题描述】:

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

这里是表单的创建

$builder
            ->add('name', 'text')
            ->add('description', 'textarea')
            ->add('services', 'entity', array('class' => 'MyBundle:Service', 'group_by' => 'category.name', 'property' => 'name', 'multiple' => true, 'required' => false));

这在我构建表单时非常好用,但是我正在尝试对这种类型进行单元测试

跟随this example 了解如何测试我的自定义表单类型

我收到了这个错误

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

错误是在这个命令开始单元测试时引起的:

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

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

提前致谢

【问题讨论】:

标签: forms unit-testing symfony entity custom-type


【解决方案1】:

根据Adding a Type your Form Depends on 下的 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
    }
}

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

      我猜你不能用实体类型对表单进行单元测试,因为它被定义为服务。你试过adding it manually吗?

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

      【讨论】:

      • 据我了解,当表单类型依赖于另一种表单类型时使用此方法,在我的原因中,它是一个被传递给选择实体的实体。我设法测试了简单的表单类型,但没有测试使用实体类型的表单类型:(
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多