Symfony形式单元测试
如何对具有entity父级的FormType进行单元测试?还是phpUnit应该忽略该类?代码包括在下面Symfony形式单元测试,symfony,phpunit,Symfony,Phpunit,如何对具有entity父级的FormType进行单元测试?还是phpUnit应该忽略该类?代码包括在下面 1)审计\ReceiptBundle\Tests\Form\Type\ContactTypeTest::testSubmitValidData Symfony\Component\OptionsResolver\Exception\MissingOptionsException:缺少必需的选项“class”。 class ContactType extends AbstractType {
1)审计\ReceiptBundle\Tests\Form\Type\ContactTypeTest::testSubmitValidData
Symfony\Component\OptionsResolver\Exception\MissingOptionsException:缺少必需的选项“class”。
class ContactType extends AbstractType
{
public function __construct()
{
}
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
$resolver->setDefaults(array(
'empty_value' => 'Choose a Contact',
));
}
public function getParent()
{
return 'entity';
}
public function getName()
{
return 'contact';
}
}
测试代码:
protected function getExtensions()
{
return array(new PreloadedExtension(array(
'entity' => $this->mockFieldEntityType(),
), array()));
}
public function testSubmitValidData()
{
$formData = [
];
$type = new ContactType();
$resolve = new \Symfony\Component\OptionsResolver\OptionsResolver();
$resolve->setDefaults([
'class' => 'foo:bar'
]);
$type->setDefaultOptions($resolve);
$form = $this->factory->create($type);
// submit the data to the form directly
$form->submit($formData);
$this->assertTrue($form->isSynchronized());
$this->assertEquals($formData, $form->getData());
$view = $form->createView();
$children = $view->children;
foreach (array_keys($formData) as $key) {
$this->assertArrayHasKey($key, $children);
}
}
mockFieldEntityType()取自中提供的答案
protected function mockFieldEntityType() {
$mockEntityManager = $this->getEntityManager();
$mockRegistry = $this->getMockBuilder('Doctrine\Bundle\DoctrineBundle\Registry')
->disableOriginalConstructor()
->getMock();
$mockRegistry->expects($this->any())->method('getManagerForClass')
->will($this->returnValue($mockEntityManager));
$mockEntityManager->expects($this->any())->method('getClassMetadata')
->withAnyParameters()
->will($this->returnValue(new ClassMetadata('entity')));
$entityType = new EntityType($mockRegistry);
return $entityType;
}