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
}
}